我是Python新手
我想检查文件名checkzero.txt
是否存在
如果它不存在,我想在checkzero.txt
中写1,否则我会增加它。
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
答案 0 :(得分: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))
答案 1 :(得分:3)
这种更多的pythonic方式怎么样?
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)
尝试打开文件进行阅读。如果不存在,请设置默认值。
编辑:Tim在我的答案工作时回答。他当然是对的。为什么要使用泡菜?
答案 2 :(得分:2)
代码似乎工作正常,但如果文件最初存在但是为空,我会收到您在评论中显示的错误。第一次运行代码时,请确保该文件尚不存在。