私はWindows 64bitで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
結果:3行目のため18446744073709551714で何
'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
?それは不可能な価値のように見えますが、f.seek(18446744073709551714)
は3行目の終わりまで私を連れて来るかもしれません。しかし、私は理由を理解できないようです。
はEDITは:バイナリモードで オープニング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
お待ちください。メモ帳を使用してテキストファイルを作成しました。そして、notepad2を使用してラインの終わりを表示すると、私はCR + LFを見ています。 Unixの行末はLFだけですか? 私のテストファイルで微調整した後、明らかに、長い行がこの問題を起こしやすくなります。 – Eric
@EricあなたはPythonからバイナリモードでファイルを開き、その内容を見ましたか?また、ファイルの内容を投稿したり、ファイルをどこかにアップロードしてテストすることもできますか? AFAIKの鉱山は賢明な説明であり、私はpythonのファイルが正しいと強く信じています。だから、問題は単にftell()の呼び出しがゴミを返すということだけです。 – Bakuriu
元の質問をバイナリモードで編集し、テキストファイルをmediafireにアップロードしました。 – Eric