2016-04-12 10 views
1

私は最後の数字をファイル内で読み取ろうとしています。次のように私のコードは次のとおりです。否定的な検索python

file = open("file.txt", "rb") 
print (file.seek(-2, 2)) 
file.close() 

次のように私のファイルの内容は次のとおりです。

1,2,1,1,2,0,1,1,2,1,1,1,0,0,0,0,1,2,0,0,0,1,0,1,1,0,0,0,1,0,0,2,1,1, 

私は「1」を印刷するためのプログラムを期待しますが、なぜこの誰もが知っている、それは実際には「3」を出力しますそれを修正する方法は?ありがとう!

+1

あなたが何をしたいのかはっきり明記してくださいとあなたが直面している問題。 – kanayamalakar

+0

これは、より大きな数値の代わりに3を出力することは奇妙に思えます。あなたの実際のファイルはこれよりも小さかったですか? – user2357112

答えて

1

seekは、オフセット文字(またはバイナリモードではバイト)で動作することに注意してください。あなたの例で数字を区切っている各カンマは、文字(またはあなたがバイナリモードで開いたのであなたのケースのバイト)としてカウントされます。あなたが提供した例では、最後の数に2番目を読み出すためには、あなたが戻って4つの文字(2つの数字と2つのカンマ、あなたのファイルがコンマで終了しているため)を追求する必要があり、その後、

f.seek(-4, 2) 
r.read(1) 
単一の文字を読んで

数字のいずれかが1桁より大きい場合、これは機能しません。あなたのファイルを見ると、バイナリで書かれているようには見えないので、バイナリモードで開くことはあまり意味がありません。ファイルがメモリに収まるように十分に小さい場合、それは最後の数に秒を取得するには、その後、ファイル全体を読んで、それを解析する単純でエラーが発生しにくいだろう

number = int(f.read().strip(',').split(',')[-2]) 
+0

これを使用してファイルに数値を追加できますか?たとえば、:= f.seek(-4,2)+ f.seek(-3,2)を追加してからそれを印刷してください:print(added) – ghehgoo

+0

'seek'はその文字を返さないポジション。それは位置を返すので、位置インデックスを追加することは本当に有用ではありません。 –

2

戻り値seekはファイルから読み取られません。 Python 2では、戻り値はNoneです。 Python 3では、戻り値はファイル内の新しい絶対位置を表す数値であり、テキストモードでのファイルの先頭からのバイト数または文字数に対応しない可能性があります。

シークした後に文字を読みたい場合はfile.read(1)に電話してください。