我正在尝试将文件的一部分读取到字节数组中,但没有成功。我要多留一双眼睛,这可能是显而易见的。
示例文件段:
...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上
您是否在Windows上以文本模式读取文件(默认情况下,除非在模式字符串中用b调用open()否则默认情况下)?如果是这样,它可能会有'\r\n'
换行符,该换行符是两个字节大,但是在您阅读时'\n'
通过剥离the来转换为换行符'\r'
。来自help(file.seek)
:“如果文件以文本模式打开,则只有tell()返回的偏移量是合法的。”
这将解释您的症状,就像您实际上正在阅读一样'\n'
,'\r\nf'
并且在每种情况下都应清除'e\r\nf'
所有症状'\r'
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句