file.seek()和read()相对于当前位置

时间:2014-11-29 23:56:27

标签: python python-2.7

我试图将部分文件读入bytearray但没有成功。我会使用额外的一双眼睛,这可能是显而易见的。

示例文件段:

...line one\nline two\nline three\nfourth line\n
                                   ^        
                                   |___ fp.tell() 

fp.seek(-1,os.SEEK_CUR)print fp.read(1)输出后(按预期方式)\n

如果另一方面,我执行fp.seek(-2,os.SEEK_CUR),而不是预期的e\n输出\nf

之后,我尝试使用fp.seek(-3,os.SEEK_CUR)print fp.read(3),输出为e\nf

换句话说,字节被读取"两种方式" (无论严格否定指针运动)(向左和向右)。我相信我在这里遗漏了一些东西。任何提示?

编辑:它在Windows上

1 个答案:

答案 0 :(得分:2)

您是否正在以文本模式读取文件(默认情况下,除非在模式字符串中使用b调用open())?如果是这样,它可能有'\r\n'个换行符,这两个换行符大两个字节,但在阅读时通过剥离'\n'只转换为'\r'。从help(file.seek):"如果文件以文本模式打开,则只有tell()返回的偏移是合法的。"

这可以解释您的症状,因为您实际上正在阅读'\n''\r\nf''e\r\nf',并且在每种情况下删除了'\r'