我需要用Python逐行处理一个大文件(大约1GB)。我用这种方法来做:
with open('file.txt', 'r') as f:
i = 0
for fline in f:
process(fline)
i = i + 1
print i
CCD_ 1的值(迭代次数=文件的行数)是19991889。
但是该文件(使用EmEditor打开)报告该文件具有63941070行。
为什么行数不匹配?我做错了什么?
谢谢。
我能想到两种可能性。
- 您在Windows上运行的是2.x,该文件包含的'\r'字符大约是可识别的'\r\n'或'\n'行结尾的3倍,EmEditor将'\r'识别为行结尾,Python 3.x也是如此。或者在另一个操作系统上,2.7也发生了类似的情况
说明:您以文本模式打开文件。3.x使用独立于操作系统的通用换行符,并且'\r'和'\r\n'被转换为'\n'。2.x使用依赖于操作系统的读取,而在Windows上,仅使用"\r\n"。
示例:
with open('tem.dat', 'wb') as f:
f.write(b'arbrncnrdn')
with open('tem.dat', 'r') as f:
for i, t in enumerate(f):
print(i, t, repr(t[-1]))
3.x打印
0 a
'n'
1 b
'n'
2 c
'n'
3
'n'
4 d
'n'
2.x打印
(0, 'arbn', "'\n'")
(1, 'cn', "'\n'")
(2, 'rdn', "'\n'")
诊断:在处理之前将"if'\r'in fline:print(fline)"添加到代码中。
- 文件中有一些内容被Python视为文件结尾,而EmEditor则没有。诊断在循环之前添加"length=0",在循环中添加"length+=len(fline)",然后查看它是否正好在后面
由于open
函数使用的编码对此文件不正确,因此数字不匹配,请尝试使用"ISO-8859-1"编码。