python 2.7 : len() returns wrong value for line from file with newline character

标签 python python-2.7 file-io newline

我在 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/

相关文章:

python - 我如何用 Python 编写这个等式?

python - 用多字符字母查找特定字母表中的所有单词

python - 如何使用 PIL 裁剪图像?

python - Python 游戏 - 添加选项 "Restart game"

Python网络驱动程序: If-And Statement Not Working With Numeric Values

python-2.7 - 如何运行python通过CRONTAB自动打开浏览器?

r - 将r中的列表写入excel文件

c# - 在 C# 中将多个文件合并到一个文件中最快的方法是什么?

linux - 写入内存映射稀疏文件的孔中

python - 如何确定 SQLAlchemy 中自引用一对多关系的方向