1

私は今非常に基本的なプログラマーなので、Pythonプログラミングの非常に基本的なことを知りたいです):結果(リスト、文字列など)をPythonのファイルに保存するにはどうすればよいですか?私はたくさん検索してきましたが、これに対する良い答えは見つかりませんでした。私は「.write()」メソッドについて考えていましたが、(たとえば)文字列では機能しないようです。だから、私の状況は私が編集したいバイナリファイルを持っているので、それらを文字列に変換して変更するのが簡単であることがわかりました、そして今私はそれらを保存したいと思いますi)バイナリファイル(jpeg画像)に戻しますおよびii)必要なフォルダ内。どうすればいいですか?助けが必要です。

アップデート

これが私が実行しようとしているスクリプトです:

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_dir= os.path.join (newpath, 'feed', 'address')

data.close ()


# do my edits in a secon time...

edit_data.write (newpath)

edit_data.close ()

私が得るエラーは次のとおりです。

AttributeError: 'str' object has no attribute 'write'

UPDATE_2

私はpickleモジュールを使用してバイナリファイルをシリアル化し、変更して最後に保存しようとしましたが、それでも機能しませんでした...これは私がこれまで試してきたことです:

import cPickle as pickle
binary= open ('C:\Users\Umberto\Desktop\Prove_Script\Varie\_BR_Browse.001_2065642654_1.BINARY', 'rb')
out= open ('C:\Users\Umberto\Desktop\Prove_Script\Varie\preview.txt', 'wb')
pickle.dump (binary, out, 1)

TypeError                                 Traceback (most recent call last)
<ipython-input-6-981b17a6ad99> in <module>()
----> 1 pprint.pprint (pickle.dump (binary, out, 1))

C:\Python27\ArcGIS10.1\lib\copy_reg.pyc in _reduce_ex(self, proto)
     68     else:
     69         if base is self.__class__:
---> 70             raise TypeError, "can't pickle %s objects" % base.__name__
     71         state = base(self)
     72     args = (self.__class__, base, state)

TypeError: can't pickle file objects

私が得られなかったもう1つのことは、poitするファイルを作成することになっている場合(私の場合は「out」を作成する必要がありました。そうしないと、pickleメソッドの正しい引数がありません)、または必要ありません。 。私が解決策に近づいていることを願っています。

PS:私はpickle.dumps()でも試しましたが、より良い結果は得られませんでした...

4

2 に答える 2

9

バイナリファイルを開いて別のバイナリファイルを保存する場合は、次のようにすることができます。

with open('file.jpg', 'rb') as jpgFile:
    contents = jpgFile.read()

contents = (some operations here)

with open('file2.jpg', 'wb') as jpgFile:
    jpgFile.write(contents)

いくつかのコメント:

  • 「rb」と「wb」は、それぞれバイナリモードでの読み取りと書き込みを意味します。バイナリファイルを操作するときに「b」が推奨される理由の詳細については、こちらをご覧ください。
  • Pythonのwithステートメントは、ブロックを終了するときにファイルを閉じる処理を行います。

リスト、文字列、またはその他のオブジェクトを保存し、後でそれらを取得する必要がある場合は、他の人が指摘しているように、 pickleを使用してください。

于 2013-03-04T15:44:35.380 に答える
0

「pickle」という名前の標準のPythonモジュールを使用できます。

あなたはここでそれについて読むことができます:漬物のドキュメント

データ構造の読み取りと書き込みは非常に簡単です

pickle.dump(obj, file_handler) # for serialize object to file
pickle.load(file)              # for deserialize from file

または、文字列にシリアル化することができます:pickle.dumps(..)そしてそこからロードします:pickle.loads(...)

于 2013-03-04T15:45:39.313 に答える