Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建文件并在创建文件后立即对此文件执行操作?_Python_Python 3.x - Fatal编程技术网

Python 如何创建文件并在创建文件后立即对此文件执行操作?

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

我正在使用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 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()
我目前正在尝试完整路径。我当时发现了,但忘记添加答案。谢谢!