Python:具有实际磁盘文件语义的命名内存文件?

13

我知道可以使用 io.StringIOio.BytesIO 返回一个可写入和读取的文件句柄。

但是,我正在寻找一种方法,使得内存区域看起来像一个尚未打开的命名磁盘文件。

之所以这样做是因为有些程序需要将磁盘文件的名称作为参数,并打开并操作该文件。在某些情况下,我希望这些程序的输入或输出为内存缓冲区,而不是磁盘文件,并且对于这些程序,我不能传递已经打开的文件句柄。

例如,PILImage.save() 就是这样一个例子,它期望其参数为路径名,而不是已打开的文件句柄。当使用该例程时,我希望图像数据直接保存到内存缓冲区,而不执行任何中间文件 I/O 操作。还有许多其他使用路径名作为参数的例程,我也希望具有相同的行为。

有没有办法在 Python 中实现这个目标?


Image.save() 可以接受文件指针作为文件名,因此您可以使用 BytesIO - kindall
嗯...我尝试过,但失败了,不过我会再试一次。也许我犯了其他错误。然而,我仍在寻找这个问题的通用解决方案。我只是举了Image.save()作为例子。 - HippoMan
是的,这就是为什么我发布了一个评论而不是答案的原因。您可以通过重写“open”并为特殊路径(您如何定义“特殊”取决于您)返回一个“BytesIO”对象而不是文件来实现您想要的结果。 - kindall
1
哦,好的。我明白了。是的,我正在考虑类似的东西。我只是希望已经存在某个包可以做到我想要的事情。但如果没有,我会自己写一个。特别是关于Image.save(),事实证明我必须先通过像byteiobuffer.name =“foo.jpg”这样的方式设置BytesIO缓冲区的名称,因为Image.save()查看该name属性以获取图像类型。 - HippoMan
看看这个,可能是你需要的:https://stackoverflow.com/questions/32321216/making-a-memory-only-fileobject-in-python-with-pyfilesystem - Shmulik Asafi
是的,那个内存文件系统看起来确实是我正在寻找的。谢谢。我会进一步调查,如果它能够做我想做的事情,我会将其作为答案发布在这个问题中的参考。 - HippoMan
1个回答

0

9
如果您添加一个如何在内存中创建文件并使用pyfilesystem按名称访问它的示例,将会很有用。 - bli

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