匿名用户
1级
2018-09-29 回答
首先上优化后的代码:
import datetime
import os
pdir = 'result\\'
if not os.path.exists(pdir):
os.makedirs(pdir)
with open(pdir + 'test' + str(datetime.date.today()) + '.txt','a') as f:
f.write('1234567890')这里面,你遇到的最主要的问题就是要写入的文件其目录不存在,这在很多语言中都是不会自动处理的,所以你需要增加一个判断目录是否存在的逻辑,如果不存在就创建它。
或者为了提高效率,你也可以这样优化:
import datetime
def testZ(content):
try:
with open('result\\test' + str(datetime.date.today()) + '.txt','a') as f:
f.write(content)
except FileNotFoundError as e:
import os
os.makedirs('result\\')
return testZ(content)
testZ('1234567890')这里把写入过程封装成了一个函数,它在执行try的时候遇到了FileNotFoundError,于是执行except分支下的代码,导入os包、创建目录,然后自身递归,比起上面的代码,如果目录本身存在则会少判断一次,也要少导入一个OS包。
上面的代码因为使用了递归,所以有产生死循环的风险,虽然在这种情形下可能性不大,但为了让代码更加健壮仍然可以优化一下:
import datetime
def testZ(content,flag=1):
try:
with open('result\\test' + str(datetime.date.today()) + '.txt','a') as f:
f.write(content)
except FileNotFoundError as e:
if flag:
import os
os.makedirs('result\\')
return testZ(content,0)
else:
print(e)
testZ('1234567890')这样,通过一个关键字参数判断递归次数,正常情况只需递归一次,超出就打印错误。
追问:
首先谢谢你的解答,预先判断是否存在,再创建文件当然也可以;但是我疑惑的是我的代码虽然简陋,但是在sublime中是可以通过的,即使文件不存在也会创建;但到了CMD中执行就出现报错了,想不通区别在哪里。