Python:让savefig不要覆盖旧图

时间:2013-12-09 14:25:21

标签: python matplotlib operating-system

我只是使用

plt.savefig(filename+'.png', format='png')

保存我的情节。但是当我创建一个新版本(使用不同的颜色代码等)时,我希望保留旧版filename.png,而不必总是提出新的文件名。

由于我不是一次性完成,this对我没有帮助。我找到this关于如何防止Python覆盖文件,但那是os。有没有办法用savefig

执行此操作

最后,我希望Python检查filename.png是否存在,只有这样,将新图保存为filename1.pngfilename2.png等。

1 个答案:

答案 0 :(得分:6)

你必须自己提供一些独特的名字:matplotlib不会为你做。 matplotlib也不会检查您当前的文件名是否存在。 我会沿着以下几行写一个循环:

(未经测试的代码)

import os
i = 0
while True:
    i += 1
    newname = '{}{:d}.png'.format(filename, i)
    if os.path.exists(newname):
        continue
    plt.savefig(newname)
    break

注意:如果扩展名已为.png,则无需明确将格式设置为png

修改

我意识到上面的内容过于冗长,只是因为我想避免两次进行字符串格式化。以下可能更符合逻辑:

import os
i = 0
while os.path.exists('{}{:d}.png'.format(filename, i)):
    i += 1
plt.savefig('{}{:d}.png'.format(filename, i))