【问题标题】:Not locating a word in an open .csv in python在 python 的打开的 .csv 中找不到单词
【发布时间】:2018-02-27 17:14:41
【问题描述】:

我有一个 .csv 文件,其中包含当前所有纳斯达克股票的股票代码 (nasdaq.csv),我想通过我自己的 .csv 随机股票代码列表 (finalsheet.csv) 来确定它们是否是是否在纳斯达克上市。

nasdaq.csv 示例(它有数百个符号,这只是一个示例):

Symbol
GOGO
WFT
QD
S
RIOT

finalsheet.csv 示例(它有数百个符号,这只是一个示例):

Symbol
PIH
TURN
FLWS
FCCY
SRCE

我已尝试使用此代码检查我自己的 finalsheet.csv 并查看是否与 nasdaq.csv 匹配。

import csv

nasdaqDatabase = r'C:\Users\Sterling\Desktop\StockProject\nasdaq.csv'

with open(nasdaqDatabase, "r") as f:
    with open(r'C:\Users\Sterling\Desktop\StockProject\finalsheet.csv', 'r' ) as theFile:
        reader = csv.DictReader(theFile)
        for line in reader:
            if theFile in nasdaqDatabase:
                print(line['Symbol'], 'has been located in the NASDAQ')
                break

            else:
                print(line['Symbol'], 'is not in the NASDAQ')
                break

我不知道如何继续,这是我当前的错误。如果有人对我应该如何以不同的方式处理这个问题或如何解决这个问题有任何建议,那就太好了!

Traceback (most recent call last):
  File "C:/Users/Sterling/Desktop/StockProject/learningnumbers.py", line 9, in <module>
    if theFile in nasdaqDatabase:
TypeError: 'in <string>' requires string as left operand, not _io.TextIOWrapper

【问题讨论】:

    标签: python csv


    【解决方案1】:

    你有一个基本的流程问题:theFile 是你的文件句柄,打开文件的描述符。它确实 not 表示存储在磁盘上的字符串。您需要遍历文件的字符串。

    同样,nasdaqDatabase 是文件名,而不是内容。在搜索纳斯达克上市股票之前,您需要将其读入您选择的结构中。

    line中提取符号,如

    if line['Symbol'] in nasdaqSymbols:
        print(line['Symbol'], 'has been located in the NASDAQ')
    

    这会让你感动吗?

    【讨论】:

    • 我不得不删除我的最后一条评论,因为发生了一些奇怪的事情。它正在浏览我的工作表列表,但没有正确识别所有匹配项。例如,QD 说它可以在 NASDAQ 表中找到,但事实并非如此。为什么会说错话?
    • 这取决于您使用的比较类型。是否存在包含QD 的更长股票代码,您是否将单个字符串与in 进行比较而不是==?这可能会导致这样的问题。
    • 是的,有更长的股票代码包含 QD,这可能会造成问题。如果我将代码行更改为 if line['Symbol'] == nasdaqDatabase: 然后它将我的整个结果输出到数据库中未找到的每个符号,这显然是错误的。我对这种语言还是很陌生,所以也许我误解了你想说的。
    • 我们需要看代码。这应该作为另一个问题发布。
    【解决方案2】:
    with open('nasdaq.csv') as nasdaq, open('finalsheet.csv') as queries:
        nasdaq_txt = nasdaq.read()
        is_in = [query.strip() in nasdaq_txt for query in queries]
    

    现在is_in 是一个布尔值列表,指示finalsheet.csv 中的每一行是否在nasdaq.csv

    【讨论】:

      猜你喜欢
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 2014-05-16
      • 1970-01-01
      • 2021-07-21
      • 2013-06-03
      • 2016-02-24
      相关资源
      最近更新 更多