5

さまざまな出力が得られるようです:

from StringIO import *

file = open('1.bmp', 'r')

print file.read(), '\n'
print StringIO(file.read()).getvalue()

なんで?StringIO がテキスト文字列しかサポートしていないためでしょうか。

4

3 に答える 3

8

を呼び出すとfile.read()、ファイル全体がメモリに読み込まれます。次に、同じファイルオブジェクトを再度呼び出すとfile.read()、ファイルの最後に到達しているため、空の文字列のみが返されます。

代わりに、たとえばファイルを再度開いてみてください。

from StringIO import *

file = open('1.bmp', 'r')
print file.read(), '\n'
file.close()

file2 = open('1.bmp', 'r')
print StringIO(file2.read()).getvalue()
file2.close()

このステートメントを使用しwithて、そのコードをよりクリーンにすることもできます。

from StringIO import *

with open('1.bmp', 'r') as file:
    print file.read(), '\n'

with open('1.bmp', 'r') as file2:
    print StringIO(file2.read()).getvalue()

余談ですが、バイナリモードでバイナリファイルを開くことをお勧めします。open('1.bmp', 'rb')

于 2011-09-26T16:36:00.457 に答える
5

2 番目file.read()は、実際には空の文字列だけを返します。file.seek(0)内部ファイルオフセットを巻き戻す必要があります。

于 2011-09-26T16:45:28.940 に答える
-1

"rb"このモードは ASCII 文字と EOF のみを処理することを想定しているため、単に ではなく、 を使用して開くべきではありません"r"か?

于 2011-09-26T16:39:09.670 に答える