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

这种更蟒蛇的方式怎么样?

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 回答