Matplotlib Savefig不会覆盖旧文件

EHB*_*EHB 6 python permissions matplotlib figure windows-10

看来这一定是我机器上的权限问题。在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")
Run Code Online (Sandbox Code Playgroud)

它将在第一次运行代码时创建图形。如果我更改了代码(例如更改标签),然后重新运行,则Jupyter Notebook中显示的图将更新,但保存在我的计算机上的文件不会更新!在推出系统更新后,这是今天的新问题,因此这似乎是罪魁祸首。除了每次进行更改时都创建新文件名之外,我是否有解决此问题的见解?

小智 9

乔恩(Jon)在2015年10月2日的回答对我来说很成功。 https://superuser.com/questions/147525/what-is-the-date-column-in-windows-7-explorer-it-matches-no-date-column-from/335901#335901

基本上,Windows在文件夹中检测到很多图片,并“优化”所述文件夹中的图片。这意味着显示的列是“日期”,而不是“修改日期”,因为对于文档“已优化”的文件夹而言。日期采用创建日期和修改日期中的较早日期。当matplotlib .savefig覆盖文件时,由于创建日期不会更改,因此“日期”列永远不会更改。

为了解决此问题,我为文档定制了文件夹。为此,选择文件夹并打开属性窗口。导航到“定制”选项卡,然后在“为此文件夹优化”下选择文档。

  • 也就是说,它正在更新,但看起来并没有,因为修改的日期没有像往常一样显示(常规文件夹)。这是我的情况,感谢分享信息。 (2认同)

小智 8

只需添加“plt.close()”

plt.savefig("./figs/my_plot.jpg")
plt.close()
Run Code Online (Sandbox Code Playgroud)

  • 这不起作用。 (2认同)

ibl*_*asi 5

这可能是简单而愚蠢的,但我将执行以下操作:

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)
Run Code Online (Sandbox Code Playgroud)

直接使用“ rm”作为系统命令行可能非常困难,但是您可以使用与该选项类似的任何其他选项。

但是说实话,matplotlib不会覆盖文件很奇怪。

编辑

我看到您使用的是Windows,因此您可以使用“ del”作为删除命令行,而不是使用“ rm”作为unix。

  • 嗯,不要使用 `os.system(rm...` (shell 扩展的潜力),当有一个非常好的 python 函数 `os.remove` 时 (2认同)