Python 如何创建文件并在创建文件后立即对此文件执行操作?
我正在使用Python3.6生成文件。然后,我需要通过自动邮件发送这些文件。 下面是一些代码:Python 如何创建文件并在创建文件后立即对此文件执行操作?,python,python-3.x,Python,Python 3.x,我正在使用Python3.6生成文件。然后,我需要通过自动邮件发送这些文件。 下面是一些代码: myFiles = [] myFiles.append(getFirstFile()) # creates a file and returns its path # its name is '2019-06-24_15-01-57_hist' myFiles.append(getSecondFile()) # creates anothe
myFiles = []
myFiles.append(getFirstFile()) # creates a file and returns its path
# its name is '2019-06-24_15-01-57_hist'
myFiles.append(getSecondFile()) # creates another file and returns its path
# myFiles is a list of strings
sendAutoMail(myFiles) # sends an automatic mail with the files attached
如果不是在同一个脚本中实现,所有这些函数都可以正常工作。但是现在我把所有这些放在一起,下面是我从sendAutoMail()函数中得到的错误:
FileNotFoundError: [Errno 2] No such file or directory: '2019-06-24_15-01-57_hist'
当我查看目录时,文件确实被创建了
使用getFirstFile()
和getSecondFile()
创建文件,然后分两步运行sendAutoMail([File1,File2])
似乎可以正常工作。但是,它在一个独特的脚本中不起作用
有什么想法吗
编辑:好的,这里是函数,不确定这是否有帮助
def getFirstFile(mean, variance): # prend en paramètres une moyenne et une variance
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
import math
mu = mean
sigma = math.sqrt(variance)
x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100)
plt.grid(True)
plt.plot(x, stats.norm.pdf(x, mu, sigma)) #création d'une courbe normale centrée en mu et d'écart type sigma
# plt.show()
filename = dateFileName()+"_firstFunction"
plt.savefig(filename)
def dateFileName():
import datetime
ladate = str(datetime.datetime.now()) # récupération de la date et formattage
ladate = ladate.split(sep=".")
ladate = ladate[0].replace(" ","_")
ladate = ladate.replace(":","-")
return ladate
我使用日期作为文件名,因为我不知道任何其他方法来确保文件名是唯一的 深入研究matplotlib
的源代码,我发现使用路径(仅名称是相对路径)调用plt.savefig(文件名)
将调用函数Figure.print.[format](文件名,…)
,格式为PDF、PNG、TIFF等保存格式。。。。默认值为PNG
Figure.print\u png
使用枕头来编写图像,特别是Pillow.image.save
。该函数用于打开、写入和关闭文件
问题是,它直接关闭文件,并且仅此而已。当直接关闭文件时,python使用默认的系统缓冲区和刷新周期,因此当直接关闭文件时,它不会立即写入磁盘,或者至少不会完全写入磁盘(取决于可能保存的部分文件的大小)
为了防止这种情况发生,请在with
语句中打开代码上的文件,该语句在退出时刷新并关闭文件,如下所示:
def getFirstFile(均值、方差):#prend en paramètres une moyenne et une variance
将matplotlib.pyplot作为plt导入
将numpy作为np导入
将scipy.stats导入为stats
输入数学
mu=平均值
西格玛=数学sqrt(方差)
x=np.linspace(mu-3*sigma,mu+3*sigma,100)
plt.grid(真)
plt.plot(x,stats.norm.pdf(x,mu,sigma))#在mu和d'cart类型的sigma中使用标准中心
#plt.show()
filename=dateFileName()+“\u firstFunction”
打开时(文件名为“r+b”)为fl:
plt.savefig(佛罗里达州)
返回文件名
这应该可以解决您的问题,在某些边缘情况下,最后一个缓冲部分可能仍然没有保存。在这种情况下,您可以在return filename
语句的前面强制将缓冲区写入磁盘。将文件名附加到myFiles
时使用完整路径请提供一个确保在创建文件后关闭该文件(即使用with
子句或确保调用close()
。还可以使用完整路径,而不仅仅是Devesh建议的文件名。您能否发布一个示例,说明您在getFirstFile()
和getSecondFile()
中所做的操作,以检查是否正常?添加了getFirstFile()
我目前正在尝试完整路径。我当时发现了,但忘记添加答案。谢谢!