我在 Windows 7 64 位上使用 WinPython 2.7。
我想打开一个文件,逐行读取它的内容,当遇到某个序列时,我想从那里继续操作文件内容。
为了保存当前位置,我将当前行的长度附加到行长度列表中。但是,len(line)
返回的值太小了 1。我怀疑这是因为 Windows 的换行符 \r\n
。
以下面的代码为例。
测试文件.txt:
Line1 Line2 Line3
测试.py
fn = 'testfile.txt' f = open(fn) line_offsets = [] for line in f: line_offsets.append(len(line)) f.seek(line_offsets[1]) print '%r' % f.read()
输出:
'\nLine2\nLine3'
预期输出:
'Line2\nLine3'
我尝试通过指定读取方法(使用通用换行符)打开文件:f = open(fn, 'rU')
但这也没有成功。如果我以二进制模式打开文件,我可以让它工作,但这实际上是一个文本文件,而不是二进制文件,所以我想避免这种情况,我也想了解这里发生了什么。
最佳答案
以二进制模式打开文件,'\r'
不会从行中删除。然后 len
将返回正确的字节数。
f = open(fn, 'rb')
如果您移植到 Python 3,这将尤其重要,因为非二进制文件会在您读取它们时将字节解码为 Unicode 字符,并且计数可能方式关闭。
关于 python 2.7 : len() returns wrong value for line from file with newline character,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25532806/