文件末尾的csv.DictReader异常

时间:2012-07-13 22:23:52

标签: python csv

我使用以下代码作为解析FCC License View样本data set的概念验证:

import csv

if __name__ == '__main__':
    csv_file = open('fcc-license-view-data-sample.csv', 'rb')
    dialect = csv.Sniffer().sniff(csv_file.read(1024))
    csv_file.seek(0)
    data = csv.DictReader(csv_file, dialect=dialect)
    for item in data:
        print item

模块打印完所有数据后,会抛出异常:

File "C:\Python27\lib\csv.py", line 104, in next
row = self.reader.next()
     

_csv.Error:字符串

中的换行符

为什么会发生此异常?我怎么能避免呢?

2 个答案:

答案 0 :(得分:2)

该CSV文件样本似乎在中线被截断。最后是

 "2600 TOWER OAKS BOULEVARD","ROCKVILLE","MD","2085

请注意未公开的引号。

如果您只想对样本进行操作,请不要处理最后一行。我认为这应该有效:

def all_but_last_line(file):
    last = next(file)
    for line in file:
        yield last

if __name__ == '__main__':
    with open('fcc-license-view-data-sample.csv', 'rb') as csv_file:
        dialect = csv.Sniffer().sniff(csv_file.read(1024))
        csv_file.seek(0)
        data = csv.DictReader(all_but_last_line(csv_file), dialect=dialect)
        for item in data:
            print item

答案 1 :(得分:0)

我发帖,肯定很晚才回答这个问题,但因为我有同样的问题,有一个伎俩

也许那是因为您扫描目录中的csv文件并在python中消化它们。

我在上传期间不接受文件的诀窍:

使用inotify系统检查已关闭的文件。

或者对于像cron这样的进程创建一个“中间房间”:ftp目录>进程目录并使用bash技巧:

source=directorySource
destination=directoryDestination
cd $source
for file in `find $source  -mtime +1  -print `
do 
    mv $file $destination$file
done