[英]file.seek() and read() relative to the current position
我正在嘗試將文件的一部分讀取到字節數組中,但沒有成功。 我要多留一雙眼睛,這很明顯。
示例文件段:
...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'
換行符,它們是兩個字節大,但是在閱讀時通過剝離'\\r'
轉換為'\\n'
。 來自help(file.seek)
:“如果以文本模式打開文件,則只有tell()返回的偏移量是合法的。”
這將解釋您的症狀,因為實際上您正在讀'\\n'
, '\\r\\nf'
和'e\\r\\nf'
,而在每種情況下都刪除了任何'\\r'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.