我需要在不同的数据集上重复运行python脚本。这个python脚本test.py使用命令处理数据集,绘制并保存结果。
plt.savefig('result.png')
如果相同的test.py
脚本在另一个数据集上运行,我怎样才能确保新的result.png
不会覆盖我以前的结果?基本上在执行plt.savefig('result.png')
之前,我需要检查result.png是否已经存在,如果是,则将结果重命名为任何其他名称,如
result1.png
result2.png
否则,在下一个后期处理中,文件将被覆盖。
答案 0 :(得分:4)
您可以使用os.path.exists
检查文件是否已存在,如果存在,请附加一个数字。重复使用新文件名,直到找到尚不存在的文件名。
def unique_file(basename, ext):
actualname = "%s.%s" % (basename, ext)
c = itertools.count()
while os.path.exists(actualname):
actualname = "%s (%d).%s" % (basename, next(c), ext)
return actualname
实施例使用状态:
for i in range(5):
with open(unique_file("foo", "txt"), "w") as f:
f.write(str(i))
答案 1 :(得分:3)
import time
if os.path.exists('result.png'):
plt.savefig('result_{}.png'.format(int(time.time())))
else:
plt.savefig('result.png')
答案 2 :(得分:1)
您可以使用标准库中提供的tempfile.mkstemp
import tempfile
fi, filename = tempfile.mkstemp(prefix='result_', suffix='.png')
注意:fi
是一个整数。如果您需要文件对象
f = os.fdopen(fi, "w")
而filename
包括创建文件的绝对路径名,例如
'/tmp/result_d_3787js.png'
另一种解决方案是使用UUID,例如
import uuid
filename = 'result_'+str(uuid.uuid4())+'.png'
产生类似
的东西result_cf29d123-271e-4899-b2f6-d172f157af65.png
上