1

我使用以下代码作为解析FCC License View示例数据集的概念证明:

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:字符串内的换行符

为什么会出现这个异常?我怎样才能避免它?

4

2 回答 2

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
于 2012-07-13T22:31:28.170 回答
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
于 2013-10-03T08:40:23.823 回答