3

Python は初めてなので 、ファイル名が存在するかどうかを確認したいcheckzero.txt存在 しない場合は に 1 を書き込み、存在しない場合checkzero.txtはインクリメントします。

if os.path.exists("checkzero.txt"):

    f = open('checkzero.txt', 'r')
    counter = pickle.load(f)
    f.close()

    counter = counter + 1

    f = open('checkzero.txt', 'w')
    pickle.dump(counter, f)
    f.close()

else:
    f = open('checkzero.txt', 'w')
    pickle.dump(1, f)
    f.close()

ただしcheckzero.txt、空のファイルとして作成すると、次のエラーが発生します。

Traceback (most recent call last):
  File "FileBasics.py", line 8, in <module>
    counter = pickle.load(f)
  File "/usr/local/Cellar/python/2.7.2/lib/python2.7/pickle.py", line 1378, in load
    return Unpickler(file).load()
  File "/usr/local/Cellar/python/2.7.2/lib/python2.7/pickle.py", line 858, in load
    dispatch[key](self)
  File "/usr/local/Cellar/python/2.7.2/lib/python2.7/pickle.py", line 880, in load_eof
    raise EOFError
EOFError
4

3 に答える 3

4

pickleバイナリ モードでファイルを開く必要があります。

f = open('checkzero.txt', 'rb')

f = open('checkzero.txt', 'wb')

しかし、なぜpickleまったく使用するのですか?

次のように同じ結果を得ることができます。

try:
    with open("checkzero.txt") as f:
        counter = int(f.read()) +1
except IOError:
    counter = 1
with open("checkzero.txt", "w") as f:
    f.write(str(counter))
于 2012-09-12T16:28:04.410 に答える
3

このもっとPython的な方法はどうですか?

try:
    with open('checkzero.txt', 'rb')as f:
        counter = pickle.load(f) + 1
except IOError:
    counter = 1

with open('checkzero.txt', 'wb') as f:
    pickle.dump(counter, f)

読み取るためにファイルを開いてみてください。存在しない場合は、デフォルト値を設定してください。

編集:私が答えに取り組んでいる間、ティムは答えました。もちろん彼は正しい。なぜピクルスを使うのですか?

于 2012-09-12T16:52:24.270 に答える
2

コードは正常に動作しているようですが、ファイルが最初に存在するが空の場合、コメントで示したエラーが発生します。コードを初めて実行するときは、ファイルがまだ存在していないことを確認してください。

于 2012-09-12T16:40:57.800 に答える