Python 写入 mkstemp() 文件
Python write in mkstemp() file
我正在使用 :
创建一个 tmp 文件
from tempfile import mkstemp
我正在尝试写入此文件:
tmp_file = mkstemp()
file = open(tmp_file, 'w')
file.write('TEST\n')
确实我关闭了文件并正确执行了但是当我尝试 cat tmp 文件时,它仍然是空的..它看起来很基本但我不知道为什么它不起作用,有什么解释吗?
mkstemp()
returns 带有文件描述符和路径的元组。我认为问题在于您写错了路径。 (您正在写入 '(5, "/some/path")'
之类的路径。)您的代码应如下所示:
from tempfile import mkstemp
fd, path = mkstemp()
# use a context manager to open the file at that path and close it again
with open(path, 'w') as f:
f.write('TEST\n')
# close the file descriptor
os.close(fd)
smarx 的回答通过指定 path
打开文件。但是,指定 fd
更容易。在这种情况下,上下文管理器会自动关闭文件描述符:
import os
from tempfile import mkstemp
fd, path = mkstemp()
# use a context manager to open (and close) file descriptor fd (which points to path)
with os.fdopen(fd, 'w') as f:
f.write('TEST\n')
# This causes the file descriptor to be closed automatically
此示例使用 os.fdopen
打开 Python 文件描述符以编写很酷的内容,然后关闭它(在 with
上下文块的末尾)。其他非 Python 进程可以使用该文件。最后,文件被删除。
import os
from tempfile import mkstemp
fd, path = mkstemp()
with os.fdopen(fd, 'w') as fp:
fp.write('cool stuff\n')
# Do something else with the file, e.g.
# os.system('cat ' + path)
# Delete the file
os.unlink(path)
mkstemp returns (fd, name) 其中fd是一个os级的文件描述符,准备好以二进制模式写入;所以你只需要使用 os.write(fd, 'TEST\n')
,然后使用 os.close(fd)
.
无需使用 open
或 os.fdopen
重新打开文件。
jcomeau@bendergift:~$ python
Python 2.7.16 (default, Apr 6 2019, 01:42:57)
[GCC 8.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> from tempfile import mkstemp
>>> fd, name = mkstemp()
>>> os.write(fd, 'TEST\n')
5
>>> print(name)
/tmp/tmpfUDArK
>>> os.close(fd)
>>>
jcomeau@bendergift:~$ cat /tmp/tmpfUDArK
TEST
在命令行测试中,当然没有必要使用os.close
,因为文件在退出时被closed。但这是糟糕的编程习惯。
我正在使用 :
创建一个 tmp 文件from tempfile import mkstemp
我正在尝试写入此文件:
tmp_file = mkstemp()
file = open(tmp_file, 'w')
file.write('TEST\n')
确实我关闭了文件并正确执行了但是当我尝试 cat tmp 文件时,它仍然是空的..它看起来很基本但我不知道为什么它不起作用,有什么解释吗?
mkstemp()
returns 带有文件描述符和路径的元组。我认为问题在于您写错了路径。 (您正在写入 '(5, "/some/path")'
之类的路径。)您的代码应如下所示:
from tempfile import mkstemp
fd, path = mkstemp()
# use a context manager to open the file at that path and close it again
with open(path, 'w') as f:
f.write('TEST\n')
# close the file descriptor
os.close(fd)
smarx 的回答通过指定 path
打开文件。但是,指定 fd
更容易。在这种情况下,上下文管理器会自动关闭文件描述符:
import os
from tempfile import mkstemp
fd, path = mkstemp()
# use a context manager to open (and close) file descriptor fd (which points to path)
with os.fdopen(fd, 'w') as f:
f.write('TEST\n')
# This causes the file descriptor to be closed automatically
此示例使用 os.fdopen
打开 Python 文件描述符以编写很酷的内容,然后关闭它(在 with
上下文块的末尾)。其他非 Python 进程可以使用该文件。最后,文件被删除。
import os
from tempfile import mkstemp
fd, path = mkstemp()
with os.fdopen(fd, 'w') as fp:
fp.write('cool stuff\n')
# Do something else with the file, e.g.
# os.system('cat ' + path)
# Delete the file
os.unlink(path)
mkstemp returns (fd, name) 其中fd是一个os级的文件描述符,准备好以二进制模式写入;所以你只需要使用 os.write(fd, 'TEST\n')
,然后使用 os.close(fd)
.
无需使用 open
或 os.fdopen
重新打开文件。
jcomeau@bendergift:~$ python
Python 2.7.16 (default, Apr 6 2019, 01:42:57)
[GCC 8.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> from tempfile import mkstemp
>>> fd, name = mkstemp()
>>> os.write(fd, 'TEST\n')
5
>>> print(name)
/tmp/tmpfUDArK
>>> os.close(fd)
>>>
jcomeau@bendergift:~$ cat /tmp/tmpfUDArK
TEST
在命令行测试中,当然没有必要使用os.close
,因为文件在退出时被closed。但这是糟糕的编程习惯。