2016-09-28 4 views
0

私はPythonスクリプトを作成しています。異なるバイトサイズのファイルに文字列を書き込みますか?

文字列のlen()1048576であり、文字列のsys.getsizeof()1048597です。

ただし、この文字列をファイルに書き込むと、ファイルのバイトサイズは1051027になります。私のコードは以下の通りですが、ファイルのバイトサイズが文字列のバイトサイズと異なるのはなぜですか?

print type(allInOne) # allInOne is my string 
print len(allInOne) 
print sys.getsizeof(allInOne) 
newFile = open("./all_in_one7.raw", "w") 
newFile.write(allInOne.encode('ascii')) 
newFile.close() 

私の文字列は、dataset.pixel_arrayはタイプnumpy.ndarrayであり、この上に、それはこのallInOne = numpy.uint8(dataset.pixel_array).tostring()のように生成された、前に多くのプロセスで生成され、allInOneです。私はこの情報が助けになるかどうかわかりません。

+0

オーバーヘッド – kaminsknator

+0

@kaminsknatorファイルの種類などからしかし、私は、同じファイルタイプに「ABCD」のような単純な文字列、 'len'を記述する場合文字列のバイトサイズとまったく同じです。 –

+0

'len(allInOne.encode( 'ascii'))'とは何ですか?あなたはどのファイルシステムタイプに書き込んでいますか? – cdarke

答えて

5

allInOne = numpy.uint8(dataset.pixel_array).tostring()はテキストのようには見えません。 Pythonのファイルにテキスト以外の文字を書き込むときは、"w"の代わりに0x0Aバイトがの行末とはみなされないように、open the file in binary mode"wb")の代わりに'\r\n'の行末マイクロソフトウィンドウズ。

これはあなたの問題であるかどうかを確認するために、count that particular character

print len(allInOne), "bytes" 
print len(allInOne) + allInOne.count('\n'), "bytes with 0A counted twice" 
+0

はい!これはまさにポイントです! –

関連する問題