用mkstemp指定文件名,找不到文件

时间:2019-03-07 23:08:51

标签: python python-3.x temporary-files mkstemp

我需要能够创建一个具有指定文件名的临时文件并向其中写入数据,然后将带有文件名的文件与其他文件一起压缩:

fd, path = tempfile.mkstemp(".bin", "filename", "~/path/to/working/directory/")
try:
    with os.fdopen(fd, "wb") as tmp:
        tmp.write(data)
    with ZipFile("zip.zip", "w") as zip:
        zip.write("filename")        
        zip.writestr("file2", file2_str)
        zip.writestr("file3", file3_str)
        # ...
finally:
    os.remove(path)

我想我一定误会了mkstemp的工作原理,我在这里的第一行代码中得到了错误:

FileNotFoundError: [Errno 2] No such file or directory: '~/path/to/working/directory/filenameq5st7dey.bin'

在将后缀放在文件上之前,似乎在文件名中添加了一堆垃圾。我已经试过了,没有后缀,但是文件名的末尾仍然出现垃圾。

除了文件名中的垃圾之外,为什么我会得到一个找不到文件的错误,而不是在我的目录中使用该名称创建一个临时文件(加上垃圾)?

1 个答案:

答案 0 :(得分:2)

您提供了以下参数:

"~/path/to/working/directory/"

完全自然,为什么要提供它也很有意义。但这是错误的。如果您ls .,则可能找不到~目录。

您想要的是像Bourne shell一样扩展到${HOME}。在python中,我们必须调用this function

os.path.expanduser("~/path/to/working/directory/")

打印返回的结果,然后您会明白为什么这样做很重要。

有些人更愿意pathlib为他们完成工作:

from pathlib import Path
Path("~/path/to/working/directory/").expanduser()
相关问题