15

ドキュメントを読みましたが、readlines(n) は何をしますか? readlines(n) とは、readlines(3) またはその他の数値を意味します。

readlines(3) を実行すると、readlines() と同じ結果が返されます。

4

3 に答える 3

17

オプションの引数は、ファイルから読み取られる (おおよその) バイト数を意味する必要があります。現在の行が終了するまで、ファイルはさらに読み取られます。

readlines([size]) -> list of strings, each a line from the file.

Call readline() repeatedly and return a list of the lines so read.
The optional size argument, if given, is an approximate bound on the
total number of bytes in the lines returned.

別の引用:

オプションのパラメーターsizehintが与えられた場合、ファイルからそのバイト数と行を完了するのに十分なバイト数を読み取り、そこから行を返します。

小さなファイルにはあま​​り効果がないように見えますが、これは興味深いことです。

In [1]: open('hello').readlines()
Out[1]: ['Hello\n', 'there\n', '!\n']

In [2]: open('hello').readlines(2)
Out[2]: ['Hello\n', 'there\n', '!\n']

ドキュメントの次のフレーズで説明されていると思われるかもしれません。

readline() を使用して EOF まで読み取り、読み取った行を含むリストを返します。オプションの sizehint 引数が存在する場合、EOF まで読み取る代わりに、合計で約 sizehint バイト(おそらく内部バッファー サイズに切り上げた後) の行全体が読み取られます。ファイルのようなインターフェイスを実装するオブジェクトは、実装できない場合、または効率的に実装できない場合、sizehint を無視することを選択できます。

ただし、バッファリングせずにファイルを読み取ろうとしても、何も変更されていないようです。つまり、他の種類の内部バッファが意図されています。

In [4]: open('hello', 'r', 0).readlines(2)
Out[4]: ['Hello\n', 'there\n', '!\n']

私のシステムでは、この内部バッファ サイズは約 5k バイト / 1.7k 行のようです。

In [1]: len(open('hello', 'r', 0).readlines(5))
Out[1]: 1756

In [2]: len(open('hello', 'r', 0).readlines())
Out[2]: 28080
于 2013-01-26T20:00:54.083 に答える
0

ファイルのサイズに応じて、readlines(hint) はより小さな行セットを返す必要があります。ドキュメントから:

f.readlines() returns a list containing all the lines of data in the file. 
If given an optional parameter sizehint, it reads that many bytes from the file 
and enough more to complete a line, and returns the lines from that. 
This is often used to allow efficient reading of a large file by lines, 
but without having to load the entire file in memory. Only complete lines 
will be returned.

したがって、ファイルに数千の行がある場合、たとえば... 65536 を渡すことができます。一度に最大で次の行を完了するのに十分なバイト数までしか読み取らず、完全に読み取られたすべての行を返します。

于 2013-01-26T20:02:38.600 に答える