使用 mkstemp 指定文件名,找不到文件
Specifying file name with mkstemp, file not found
我需要能够创建一个具有指定文件名的临时文件并向其中写入数据,然后将该文件与其他文件一起压缩:
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'
在文件上加上后缀之前,文件名中似乎添加了一堆垃圾。我试过没有后缀,但文件名末尾仍然是乱码。
除了文件名中的垃圾之外,为什么我会收到找不到文件错误,而不是在我的目录中创建一个具有该名称(加上垃圾)的临时文件?
你提供了这个参数:
"~/path/to/working/directory/"
很自然,你为什么要提供它是有道理的。但这是错误的。如果你 ls .
你可能找不到 ~
目录。
您希望扩展到 ${HOME}
,就像 Bourne shell 所做的那样。在 python 中我们必须调用 this function:
os.path.expanduser("~/path/to/working/directory/")
将结果打印出来 returns,您就会明白为什么它很重要。
有些人更喜欢让 pathlib 为他们完成工作:
from pathlib import Path
Path("~/path/to/working/directory/").expanduser()
我需要能够创建一个具有指定文件名的临时文件并向其中写入数据,然后将该文件与其他文件一起压缩:
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'
在文件上加上后缀之前,文件名中似乎添加了一堆垃圾。我试过没有后缀,但文件名末尾仍然是乱码。
除了文件名中的垃圾之外,为什么我会收到找不到文件错误,而不是在我的目录中创建一个具有该名称(加上垃圾)的临时文件?
你提供了这个参数:
"~/path/to/working/directory/"
很自然,你为什么要提供它是有道理的。但这是错误的。如果你 ls .
你可能找不到 ~
目录。
您希望扩展到 ${HOME}
,就像 Bourne shell 所做的那样。在 python 中我们必须调用 this function:
os.path.expanduser("~/path/to/working/directory/")
将结果打印出来 returns,您就会明白为什么它很重要。
有些人更喜欢让 pathlib 为他们完成工作:
from pathlib import Path
Path("~/path/to/working/directory/").expanduser()