在Python中如何将文件写入内存路径并从内存路径读取?

5
一个现有的 Python 包需要将文件路径作为输入参数传递给一个方法,以便能够从该路径解析文件。我想在云环境中使用这个非常特定的 Python 包,但在这种情况下,我无法将文件写入硬盘。我没有直接控制现有 Python 包中的代码,并且很难切换到另一个环境,在那里我可以将文件写入硬盘。因此,我正在寻找一种解决方案,可以将文件写入内存文件路径,并让解析器直接从这个内存文件路径读取。在 Python 中是否可能实现这一点?或者是否有其他解决方案?
可用于硬盘的示例 Python 代码,应更改为不使用硬盘:
temp_filepath = "./temp.txt"
with open(temp_filepath, "wb") as file:
  file.write("some binary data")
model = Model()
model.parse(temp_filepath)

以下是使用内存文件系统存储文件的 Python 代码示例,但不允许解析器从内存文件系统中读取文件:

from fs import open_fs
temp_filepath = "./temp.txt"
with open_fs('osfs://~/') as home_fs:
  home_fs.writetext(temp_filepath, "some binary data")
model = Model()
model.parse(temp_filepath)

这个包能否接受一个打开的文件对象?如果是这样,你可以使用 io.BytesIO - tdelaney
你使用的操作系统是什么? - ti7
我正在使用在 Linux 操作系统上的 Azure 函数。 - Davma
该程序包无法接受打开的文件对象,需要提供文件路径。它甚至会验证文件路径是否具有正确的扩展名。 - Davma
微软提供了一种解决方案,可以将数据存储在临时目录中:https://learn.microsoft.com/en-us/answers/questions/42218/python-37-file-system-is-read-only.html - Davma
1个回答

4

你可能正在寻找 StringIO 或者 BytesIO 来自于 io 模块。

import io

with io.BytesIO() as tmp:
    tmp.write(content)
    # to continue working, rewind file pointer
    tmp.seek(0)
    # work with tmp 

pathlib 也可能是一个优势


1
感谢ti7的回答。不幸的是,该软件包无法接受像io.BytesIO或io.StringIO这样的打开文件对象,因为Python软件包基于文件路径验证后缀名和文件类型。 - Davma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接