如何做虚拟文件处理?

所以为了创build文件我使用以下内容:

fileHandle = open('fileName', 'w') 

然后将内容写入文件,closures文件。 在下一步我处理文件。 在程序结束时,我最终得到一个我需要删除的“物理文件”。

有没有办法编写一个“虚拟”文件,其行为与“物理”文件完全相同(允许以相同方式操作),但在Python运行结束时不存在?

您可能需要考虑使用tempfile.SpooledTemporaryFile ,它可以为您提供两全其美的意义,它将最初创build一个基于内存的临时虚拟文件,但如果数据保存在内存中,将自动切换到物理的基于磁盘的文件超过指定的尺寸。

另一个不错的特性是(使用内存时),它将自动使用io.BytesIOio.StringIO具体取决于正在使用的mode – 允许您读取和写入Unicodestring或二进制数据(字节)。

唯一棘手的部分可能是您需要避免在步骤之间closures文件,因为这样做会导致文件从内存或磁盘中删除。 相反,你可以通过一个文件seek(0)方法调用将它倒回到开头。

当您完成文件并closures它时,如果文件中的数据量导致它被滚存到物理文件,它将自动从磁盘中删除。

你在io模块中有StringIOBytesIO

StringIO行为就像在文本模式下打开的文件 – 读写unicodestring(相当于用io.open(filename, mode, encoding='...')打开文件), BytesIO行为就像是用二进制打开的文件模式( mode='[rw]b' ),并且可以读写字节。

Python 2:

 In [4]: f = io.BytesIO('test') In [5]: type(f.read()) Out[5]: str In [6]: f = io.StringIO(u'test') In [7]: type(f.read()) Out[7]: unicode 

Python 3:

 In [2]: f = io.BytesIO(b'test') In [3]: type(f.read()) Out[3]: builtins.bytes In [4]: f = io.StringIO('test') In [5]: type(f.read()) Out[5]: builtins.str 

您可以从官方文档中使用StringIO作为虚拟文件

 import StringIO output = StringIO.StringIO() output.write('First line.\n') print >>output, 'Second line.' # Retrieve file contents -- this will be # 'First line.\nSecond line.\n' contents = output.getvalue() # Close object and discard memory buffer -- # .getvalue() will now raise an exception. output.close() 

StringIO模块,阅读它的文档 ,应该很容易使用。

但请记住,这将使“文件”的内容保留在内存中。 如果数据太多,最好创build一个真实的文件,例如在/ tmp中,然后删除它。