首先上优化后的代码:
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')
这样,通过一个关键字参数判断递归次数,正常情况只需递归一次,超出就打印错误。