我使用以下代码作为解析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:字符串
中的换行符
为什么会发生此异常?我怎么能避免呢?
答案 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