使用open()打开TemporaryFile

时间:2018-05-08 19:01:45

标签: python python-3.x

我尝试与使用内置open()函数的现有库进行交互,以使用either a str or bytes object representing a path, or an object implementing the os.PathLike protocol读取.json文件。

我的函数生成一个使用json转换为json.dump()的字典,但我不知道如何将其传递给需要文件路径的现有函数。

我在想这样的事情可能有用,但我不确定如何获得TemporaryFile的os.PathLike对象。

import tempfile
temp_file = tempfile.TemporaryFile('w')
json.dump('{"test": 1}', fp=temp_file)
file = open(temp_file.path(), 'r')

1 个答案:

答案 0 :(得分:2)

改为创建NamedTemporaryFile() object;它有一个.name属性,你可以传递给函数:

from tempfile import NamedTemporaryFile

with NamedTemporaryFile('w') as jsonfile:
    json.dump('{"test": 1}', jsonfile)
    jsonfile.flush()  # make sure all data is flushed to disk
    # pass the filename to something that expects a string
    open(jsonfile.name, 'r')

打开已打开的文件对象确实在Windows上存在问题(您不被允许);在那里你必须先关闭文件对象(确保禁用关闭时删除),然后手动删除它:

from tempfile import NamedTemporaryFile
import os

jsonfile = NamedTemporaryFile('w', delete=False)
try:
    with jsonfile:
        json.dump('{"test": 1}', jsonfile)
    # pass the filename to something that expects a string
    open(jsonfile.name, 'r')
finally:
    os.unlink(jsonfile.name)

with语句会导致文件在套件退出时关闭(所以当您到达open()电话时)。