1

私はバイナリファイルを扱っています。jpeg画像です。Pythonで編集して保存する必要があります。私はこのスクリプトを使用してきましたが、これまでのところ正常に機能しているようです。

import os, sys

newpath= r'C:/Users/Umberto/Desktop/temporary'
if not os.path.exists (newpath):
    os.makedirs (newpath)

data= open ('C:/Users/Umberto/Desktop/Prove_Script/Varie/_BR_Browse.001_2065642654_1.BINARY', 'rb+')
edit_data= str (data.read () )
out= open (newpath+ '/preview.BINARY', 'w')

# do my edits in a secon time...

out.write (edit_data)
data.close ()
out.close ()

とにかく、(Pythonから)問題が発生しました:私の2つのファイルは同じであるはずですが、そうではありません!'emを16進エディタで開くと、外観が少し異なります(元のサイズは、新しいものよりもサイズが小さくなります。つまり、163 KB、agaist 167です)。さらに、私がそれらを開くとき、それらは異なります。それらはまだ画像として表示されますが、一方は(元の)見栄えがよく、もう一方は完全に混乱しています...何が問題だったのでしょうか。私が使用しているコードは、私が知らないものを変更していますか?もしそうなら、何ですか?あなたが私を助けてくれることを願っています。

4

2 に答える 2

2

あなたはあなたが何をしているのかを言わない

# do my edits in a secon time...

しかしそれはさておき、ライン

edit_data= str (data.read () )

データが大幅に変更されます。バイナリファイルを開き、内容を文字列に変換してから、内容を別のファイルに保存すると、状況変わります。

edit_data = data.read()

上記に変更すると、提供したスニペットが修正されますが、他の場所でデータを編集している場合は、これによっても変更されます。

提案

バイナリファイルを頻繁に編集する場合は、with構文を使用することをお勧めします

with open(my_file, 'rb+') as fo:
    edit_data = fo.read()

そうすれば、ファイルを閉じることなどを心配する必要はありません。をedit_data取得すると、これはデータを再度保存する前にその場で編集できるバイトの配列になります

with open(my_out_file, 'wb') as fo:
    fo.write(edit_data)

はるかにクリーンでシンプル!

于 2013-03-05T11:26:11.787 に答える
2

バイナリモードを使用します。

open (newpath+ '/preview.BINARY', 'wb')
于 2013-03-05T11:27:20.353 に答える