Python Matplotlib Savefig不会覆盖旧文件

Python Matplotlib Savefig不会覆盖旧文件,python,matplotlib,permissions,windows-10,figure,Python,Matplotlib,Permissions,Windows 10,Figure,这似乎是我的机器上的权限问题。在Windows 10上进行系统更新后,当我运行时: import matplotlib.pyplot as plt #make figure plt.plot([1,2,3,4]) plt.ylabel('some numbers') #save plt.savefig("./figs/my_plot.jpg") 它将在第一次运行代码时创建图形。如果我更改代码(例如更改标签),然后重新运行,Jupyter笔记本中显示的绘图会更新,但保存在我机器上的文件不会更新

这似乎是我的机器上的权限问题。在Windows 10上进行系统更新后,当我运行时:

import matplotlib.pyplot as plt
#make figure
plt.plot([1,2,3,4])
plt.ylabel('some numbers')

#save
plt.savefig("./figs/my_plot.jpg")

它将在第一次运行代码时创建图形。如果我更改代码(例如更改标签),然后重新运行,Jupyter笔记本中显示的绘图会更新,但保存在我机器上的文件不会更新!这是一个新问题,直到今天,在系统更新被推出之后,所以这似乎是一个可能的罪魁祸首。除了在每次更改时创建一个新的文件名之外,我还有什么见解可以解决这个问题吗

这可能既简单又愚蠢,但我将只做以下几点:

import os
import matplotlib.pyplot as plt
#make figure
plt.plot([1,2,3,4])
plt.ylabel('some numbers')

#save
strFile = "./figs/my_plot.jpg"
if os.path.isfile(strFile):
   os.remove(strFile)   # Opt.: os.system("rm "+strFile)
plt.savefig(strFile)
直接使用“rm”作为系统命令行可能非常困难,但您可以使用类似于该命令行的任何其他选项

但老实说,matplotlib没有覆盖该文件是很奇怪的

编辑


我发现您使用的是windows,因此您可以在unix中使用“del”作为删除命令行,而不是“rm”。

TLDR:照片被覆盖,但日期与原始文件保持不变,这是因为当文件夹中有大量照片时,windows的一个怪癖。

乔恩在2015年2月10日的回答让我如愿以偿。

基本上,windows会检测文件夹中的大量图片,并“优化”所述文件夹中的图片。这意味着显示的列是Date,而不是Date Modified,因为它适用于为文档“优化”的文件夹。日期取创建日期和修改日期中较早的日期。当matplotlib.savefig覆盖文件时,创建日期不会更改,因此日期列永远不会更改

为了解决这个问题,我自定义了文档文件夹。要执行此操作,请选择文件夹并打开“属性”窗口。导航到“自定义”选项卡,然后在“优化此文件夹”下选择文档。

只需添加“plt.close()


这是很有用的——如果没有人对所做的更改以及如何修复有基于Windows的解释,我将在几天后接受。一个很好的解决方案。嗯,当有一个非常好的python函数时,不要使用
os.system(rm…
(外壳扩展的潜力)。删除
os.remove
我同意。我用原始
system
调用更新代码,作为可选的体面解决方案,除非它对我不起作用。即使在删除文件时(使用os.remove)在保存新版本之前,Windows至少会保留旧日期。bbade的回答解释了这个问题。因此,我想人们可以试着不再担心文件是否更新。也就是说,它正在更新,但看起来好像没有,因为修改的日期没有像往常一样显示(常规文件夹)。这是我的情况,感谢您共享信息。如果要与其他人共享代码,请按照@iblasi的建议删除该文件更安全。您无法确定与您共享代码的人是否已相应地自定义了其文件夹。对于某些文件,DateCreated保持不变,即使我删除了这些文件(来自Python或Windows本身)在保存同名新文件之前。这很奇怪。我不知道,这似乎是Windows中的一个错误。因此…无论您优化文件夹的目的是什么,这都是不可靠的。DateCreated似乎不可信。
plt.savefig("./figs/my_plot.jpg")
plt.close()