2017-12-16 23 views
1

私は5GBファイルの内容を読み込み、それらをソートして重複を見つけようとしています。このファイルは、基本的に単なる数字のリストです(それぞれ新しい行にあります)。空行や数字以外の記号はありません。数字はすべてかなり大きい(少なくとも6桁)。私は現在使用中ですPythonのreadline()とreadlines()が動作しない

for line in f: 
    do something to line 

メモリの問題を避けるためです。私はそれを使っても問題ありません。しかし、なぜ私はreadline()とreadlines()がうまくいかなかったのか知りたいです。試してみると、私がパラメータとして使用する数字に関係なく、プログラムは常に同じ行を返します。正確に言えば、私がreadline(0)を行うと、ファイルの最初の行が大きな数であっても、空の行を返します。私がreadline(1)を試しても、数字2がファイルにないのに2を返します。パラメータが> = 6の場合、常に同じ番号が返されます。291965

さらに、readlines()メソッドは、パラメータが何であっても常に同じ行を返します。 f.readlines(2)を印刷しようとしても、それでも1000個以上の数字のリストが得られます。

私が非常にうまく説明しているかどうかはわかりません。申し訳ありませんが、英語は私の母国語ではありません。とにかく、私はreadlineメソッドなしで動作させることができますが、実際に期待通りに動作しない理由を知りたいのです。

これは、ファイルの最初の10行がどのように見えるかです:私はf.readline(1)は「数千行」を返す2、またはf.readlines(10)を返す再現することはできません

548098 
968516 
853181 
485102 
69638 
689242 
319040 
610615 
936181 
486052 
+2

':あなたがもう一度readlineを呼び出すと、それはバイトの合計量が指定された数よりも大きくなっている読むまでなど

同様に、f.readlines(10)がフルラインを読みます、二行目を続行しますreadline(10) 'は" read line number 10 "を意味するのではなく、"行を読むが最大10バイトを読み込む " –

+0

ありがとう。私はこれを知らなかった! – Arda

答えて

0

が、あなたはどのような整数誤解のように思えますそれらの関数へのパラメータは行いません。

これらの番号は、ではありません。は、読み取る行の番号を指定しますが、最大バイト数はreadlineとなります。

>>> f = open("data.txt") 
>>> f.readline(1) 
'5' 
>>>f.readline(100) 
'48098\n' 

両方のコマンドが最初の行から読み取られます。これは548098です。最初のものは1バイトのみを読み込み、2番目のコマンドは100バイト未満が残っているので残りの行を読み込みます。

>>> f.readlines(10) 
['968516\n', '853181\n'] 
関連する問題