我有一个90,000行CSV文件,我试图用Python的csv
阅读器进行解析,但我在脚本终止之前只获得了大约45行。我删除了除了一些行计数代码之外的所有内容,我还剩下以下内容:
import csv
with open('list.csv') as csvfile:
reader = csv.DictReader(csvfile)
headers = []
i = 1
for row in reader:
print i
if not headers:
headers = list([x.lower() for x in row])
i += 1
continue
i += 1
这准确地计算了我传递的虚拟CSV文件的行数,但不是真实行。是否存在可能导致DictReader
终止的CVS文件中的值?
在这个实际尝试解析文件的脚本版本中,我必须在调用None
等函数之前检查lower()
,即使我期望所有内容都是字符串类型。这可能是相关的吗?
答案 0 :(得分:0)
您需要以二进制模式打开文件。建议这样做有两个原因:
在文字模式下,行分隔符会转换为\n
规范形式,但在带有嵌入换行符的CSV列中,csv
模块可以将这些与常规行结尾区分开来,因为CSV格式使用一个\n
,另一个\r\n
。
在文本模式下,Windows文件读取例程将0x1A substitute character视为文件结尾字符,并假装没有其他数据。
您的CSV文件几乎肯定包含这样一个字节,并且以二进制模式打开将允许您绕过Windows对该字节的错误处理:
with open('list.csv', 'rb') as csvfile:
reader = csv.DictReader(csvfile)