逐行处理大文件的迭代次数



我需要用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行。

为什么行数不匹配?我做错了什么?

谢谢。

我能想到两种可能性。

  1. 您在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)"添加到代码中。

  1. 文件中有一些内容被Python视为文件结尾,而EmEditor则没有。诊断在循环之前添加"length=0",在循环中添加"length+=len(fline)",然后查看它是否正好在后面

由于open函数使用的编码对此文件不正确,因此数字不匹配,请尝试使用"ISO-8859-1"编码。

相关内容

  • 没有找到相关文章

最新更新