0

Pythonで私は書くことができます

content = open(filename, 'r').read()

ファイル全体をcontent変数に読み込みます。ただし、Python 2.7.5 を搭載した私の Windows マシンでは、一部の大きなファイルに対して 255 バイトしか読み取れません。file.read のドキュメントをよく見ると、ファイル全体がブロック モードで読み込まれることしか期待できないことがわかります。ブロック モードを有効にして、ファイル全体が読み取られるようにするにはどうすればよいですか?

read(...)
    read([size]) -> read at most size bytes, returned as a string.

    If the size argument is negative or omitted, read until EOF is reached.
    Notice that when in non-blocking mode, less data than what was requested
    may be returned, even if no size parameter was given.
4

2 に答える 2

4

私が問題を抱えていたファイルは、サイズが約 5 MiB の tarball、zip ファイル、および Windows 実行可能ファイル (インストーラー) でした。

バイナリ ファイルをテキスト モードで開いていました。その後、Windows では、ファイルの終わりマーカーが検出されると読み取りが終了します。また、Windows では、Windows の行末の'\r\n'を単にに変換し'\r'ます。

フラグを追加する'b'と、バイナリ モードで開くことができます。これにより、ファイルの内容が正確に返されます。

これに加えて、テキスト モードで開いた場合、Python 3 はファイル データを Unicode にデコードしようとします。そのため、バイナリ ファイルは常にバイナリ モードで開いてください。

于 2013-07-27T02:58:03.900 に答える