1

この例を機能させるのを手伝ってもらえますか?

シリアル化された dict が存在する場合はロードし、変更して再度ダンプしたいと思います。ファイルを開くために使用しているモードに問題があると思いますが、正しい方法がわかりません。

import os
import cPickle as pickle

if os.path.isfile('file.txt'):
    cache_file = open('file.txt', 'rwb')
    cache = pickle.load(cache_file)
else:
    cache_file = open('file.txt', 'wb')
    cache = dict.fromkeys([1,2,3])

# modifications of cache

pickle.dump(cache, cache_file)
cache_file.close()    

2 回実行してエラーを確認します。

Traceback (most recent call last):
  File "example.py", line 11, in <module>
    pickle.dump(cache, cache_file)
IOError: [Errno 9] Bad file descriptor
4

3 に答える 3

5

'rwb'は の正しいファイル オープン モードではありませんopen()。試してみてください'r+b'

ファイルから読み取った後、カーソルがファイルの最後に配置されるためpickle.dump(cache, cache_file)、ファイルに追加されます(これはおそらく必要なものではありません)。cache_file.seek(0)の後に試してくださいpickle.load(cache_file)

于 2010-02-14T00:11:54.540 に答える
4

ロードごとに、(mode='rb' で) ファイル ハンドルを開き、ロードし、閉じる必要があります。
ダンプごとに、ファイル ハンドルを (mode='wb' で) 開き、ダンプし、閉じる必要があります。

于 2010-02-14T00:19:07.803 に答える
1

ファイルを読み取りおよび書き込み用に開いています。つまり、ランダム アクセスです。最初にファイルを読み取るときは、ファイルのインデックス位置をファイルの最後に残すため、後でデータを書き戻すと、同じファイルに追加されます。

ファイルを読み取りモードで開き、データを読み取り、閉じてから、書き込みモードで再度開く必要があります。

于 2010-02-14T00:18:48.343 に答える