我试图将部分文件读入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上
答案 0 :(得分:2)
您是否正在以文本模式读取文件(默认情况下,除非在模式字符串中使用b调用open())?如果是这样,它可能有'\r\n'
个换行符,这两个换行符大两个字节,但在阅读时通过剥离'\n'
只转换为'\r'
。从help(file.seek)
:"如果文件以文本模式打开,则只有tell()返回的偏移是合法的。"
这可以解释您的症状,因为您实际上正在阅读'\n'
,'\r\nf'
和'e\r\nf'
,并且在每种情况下删除了'\r'
。