我在Windows 64位上使用Python 3.3.0。Python file.tell()給奇怪的數字?
我有一個文本文件,如下圖所示:(見底部在主人MediaFire下載鏈接)
hello
-data1:blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah
-data2:blah blah blah blah blah blah blah blah blah blah blah
-data3: Empty
-data4: Empty
我想要的文件瀏覽周圍的,因此我用.tell()
找出我的位置是。然而,通過文件的讀取行,如下圖所示時,我得到一個非常奇怪的結果:
f=open("test.txt")
while True:
a = f.readline()
print("{} {}".format(repr(a),f.tell()))
if a == "":
break
結果:
'hello\n' 7
'\n' 9
'-data1:blah blah blah blah blah blah blah blah blah blah blah blah blah blah bl
ah blah\n' 18446744073709551714
'\n' 99
'\n' 101
'-data2:blah blah blah blah blah blah blah blah blah blah blah\n' 164
'-data3: Empty\n' 179
'\n' 181
'-data4: Empty' 194
'' 194
與18446744073709551714爲3號線是什麼?雖然它看起來像一個不可能的值,但f.seek(18446744073709551714)
是一個可接受的值,顯然確實使我到了第三線的末尾。雖然,我似乎無法弄清楚爲什麼。
編輯: 打開二進制模式沒有給出問題tell()
:
f=open("test.txt","rb")
while True:
a = f.readline()
print("{} {}".format(repr(a),f.tell()))
if a == b"":
break
結果:
b'hello\r\n' 7
b'\r\n' 9
b'-data1:blah blah blah blah blah blah blah blah blah blah blah blah blah blah b
lah blah\r\n' 97
b'\r\n' 99
b'\r\n' 101
b'-data2:blah blah blah blah blah blah blah blah blah blah blah\r\n' 164
b'-data3: Empty\r\n' 179
b'\r\n' 181
b'-data4: Empty' 194
b'' 194
test.txt的文本文件是在這裏下載,只是一個很小的194個字節: http://www.mediafire.com/?1wm4lujb2j48y23
呃,等等,這個文本文件是用記事本創建的。使用記事本2和行結尾顯示,我看到CR + LF,這是窗口行結束吧? Unix的行結尾只有LF纔對? 經過我的測試文件修改後,顯然,更長的線條更容易得到這個問題。 – Eric 2013-04-11 04:53:46
@Eric是否嘗試從Python中以二進制模式打開文件並查看內容?另外,你可以發佈文件內容/上傳文件,以便我們可以測試嗎? AFAIK礦是唯一明智的解釋,並且我堅信Python的文件是正確的,所以我仍然認爲問題在於對'ftell()'的底層調用返回垃圾。 – Bakuriu 2013-04-11 05:36:18
我用二進制模式編輯了原來的問題,並在mediafire中上傳了文本文件。 – Eric 2013-04-11 13:39:06