使用csv.dictreader时行尾字符混淆

时间:2017-08-21 21:40:54

标签: python python-2.7 csv

我正在使用csv.dictreader返回数据行中为'True'的csv文件列表中的所有股票。

filename = glob.glob('*.csv')

susadict = {}
for file in filename: 
    with open(file, 'rb') as csvfile:
        reader = csv.DictReader(csvfile)
        susadict[file] = [row['Ticker'] for row in reader if row['Data'] == 'True']

此代码仅适用于最后一行中带有“”字符的csv文件,但对于具有“åÊ”或无字符的文件不起作用,截至目前我的11个文件中只有2个具有“”字段,所以它留下9空白。

我的预期输出是全部11个工作。

1 个答案:

答案 0 :(得分:0)

  

问题:但方言中有什么=,我有dialect = csv.Sniffer()

按照给定链接中的示例进行操作:csv.Sniffer
.seek(0)之后的Sniffer是绝对必要的!

您可以使用以下其中一种,两者都是等效的:

  1. reader = csv.DictReader(csvfile, dialect)
  2. reader = csv.DictReader(csvfile, dialect=dialect)
  3. 您的整个示例应该看起来:

    filename = glob.glob('*.csv')
    susadict = {}
    for file in filename: 
        # Python 3.x: with open(file) as csvfile:
        with open(file, 'rb') as csvfile:
            dialect = csv.Sniffer().sniff(csvfile.read(1024))
            csvfile.seek(0)
    
            reader = csv.DictReader(csvfile, dialect)
            susadict[file] = [row['Ticker'] for row in reader if row['Data'] == 'True']
    

    使用Python测试:3.4.2和Python:2.7.9 - csv:1.0