さまざまな出力が得られるようです:
from StringIO import *
file = open('1.bmp', 'r')
print file.read(), '\n'
print StringIO(file.read()).getvalue()
なんで?StringIO がテキスト文字列しかサポートしていないためでしょうか。
を呼び出すと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')
2 番目file.read()
は、実際には空の文字列だけを返します。file.seek(0)
内部ファイルオフセットを巻き戻す必要があります。
"rb"
このモードは ASCII 文字と EOF のみを処理することを想定しているため、単に ではなく、 を使用して開くべきではありません"r"
か?