我尝试与使用内置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')
答案 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()
电话时)。