でファイル全体を読んで、私は、ファイルsomething.zipから全ソースデータを読み取る必要がある(それを解凍していない)は一度
私は
f = open('file.zip')
s = f.read()
f.close()
return s
を試してみましたが、それはほんの数バイト、全体ではなく、ソース・データを返します。どのようにそれを達成するためのアイデア?ありがとう
でファイル全体を読んで、私は、ファイルsomething.zipから全ソースデータを読み取る必要がある(それを解凍していない)は一度
私は
f = open('file.zip')
s = f.read()
f.close()
return s
を試してみましたが、それはほんの数バイト、全体ではなく、ソース・データを返します。どのようにそれを達成するためのアイデア?ありがとう
バイナリファイルを扱うときにバイナリモード(b
)を使用してください。
def read_zipfile(path):
with open(path, 'rb') as f:
return f.read()
ところで、マニュアルclose
の代わりにwith
statementを使用しています。
これはそれを行う必要があります。比較のために
In [1]: f = open('/usr/bin/ping', 'rb')
In [2]: bytes = f.read()
In [3]: len(bytes)
Out[3]: 9728
を、ここで私は上記のコードで開いたファイルがあります:
-rwx------+ 1 xx yy 9.5K Jan 19 2005 /usr/bin/ping*
としては.read()
を終了EOF文字(0x1A
)がある言及操作。これを再現するには:
# Create file of 256 bytes
with open('testfile', 'wb') as fout:
fout.write(''.join(map(chr, range(256))))
# Text mode
with open('testfile') as fin:
print 'Opened in text mode is:', len(fin.read())
# Opened in text mode is: 26
# Binary mode - note 'rb'
with open('testfile', 'rb') as fin:
print 'Opened in binary mode is:', len(fin.read())
# Opened in binary mode is: 256
バイナリファイルを扱うときにバイナリモードを使用します。 'open( 'file.zip'、 'rb')' – falsetru
私が正しく理解していれば、バイナリモードは新しい行とWindows上でしか扱わないので、問題は解決しません。どのようにバイトを数えていますか? – Vlad
@Vlad Windowsのテキストのみモードで読み込みを終了できるEOF(ファイルの終わりの文字)があります。 –