如何在 python 中使用 tempfile.NamedTemporaryFile()
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3924117/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
how to use tempfile.NamedTemporaryFile() in python
提问by Manoj
I want to use tempfile.NamedTemporaryFile()to write some contents into it and then open that file. I have written following code:
我想用来tempfile.NamedTemporaryFile()向其中写入一些内容,然后打开该文件。我写了以下代码:
tf = tempfile.NamedTemporaryFile()
tfName = tf.name
tf.seek(0)
tf.write(contents)
tf.flush()
but I am unable to open this file and see its contents in notepad or similar application. Is there any way to achieve this? Why cant I do something like:
但我无法打开此文件并在记事本或类似应用程序中查看其内容。有没有办法实现这一目标?为什么我不能做这样的事情:
os.system('start notepad.exe ' + tfName)
at the end
在末尾
采纳答案by Dave Webb
This could be one of two reasons:
这可能是以下两个原因之一:
Firstly, by default the temporary file is deleted as soon as it is closed. To fix this use:
tf = tempfile.NamedTemporaryFile(delete=False)
and then delete the file manually once you've finished viewing it in the other application.
然后在其他应用程序中查看完文件后手动删除该文件。
Alternatively, it could be that because the file is still open in Python Windows won't let you open it using another application.
或者,可能是因为该文件仍在 Python 中打开,Windows 不允许您使用其他应用程序打开它。
回答by Jay P.
You can also use it with a context manager so that the file will be closed/deleted when it goes out of scope. It will also be cleaned up if the code in the context manager raises.
您还可以将它与上下文管理器一起使用,以便在文件超出范围时将其关闭/删除。如果上下文管理器中的代码引发,它也将被清理。
import tempfile
with tempfile.NamedTemporaryFile() as temp:
temp.write('Some data')
temp.flush()
# do something interesting with temp before it is destroyed
回答by Hugues
Here is a useful context manager for this. (In my opinion, this functionality should be part of the Python standard library.)
这是一个有用的上下文管理器。(在我看来,这个功能应该是 Python 标准库的一部分。)
# python2 or python3
import contextlib
import os
@contextlib.contextmanager
def temporary_filename(suffix=None):
"""Context that introduces a temporary file.
Creates a temporary file, yields its name, and upon context exit, deletes it.
(In contrast, tempfile.NamedTemporaryFile() provides a 'file' object and
deletes the file as soon as that file object is closed, so the temporary file
cannot be safely re-opened by another library or process.)
Args:
suffix: desired filename extension (e.g. '.mp4').
Yields:
The name of the temporary file.
"""
import tempfile
try:
f = tempfile.NamedTemporaryFile(suffix=suffix, delete=False)
tmp_name = f.name
f.close()
yield tmp_name
finally:
os.unlink(tmp_name)
# Example:
with temporary_filename() as filename:
os.system('echo Hello >' + filename)
assert 6 <= os.path.getsize(filename) <= 8 # depending on text EOL
assert not os.path.exists(filename)

