2017-03-02 81 views
0

我有一个包,我用于我的研究,有一个类的方法,写入一些信息,但只写入信息到一个文件(即该方法需要一个文件对象作为参数和作为唯一的参数) 。但是,我需要我的代码中的特定信息,而不是文件中。用Python写一个文件实际上是一个变量?

我目前的解决方案是让该方法将信息写入文件,然后打开该文件并使用基本的I/O函数来读取信息。

我想知道,但是,有没有办法欺骗该方法,使其认为它写入文件时,它实际上是写入变量或列表或其他东西?换句话说,有没有办法让一个文件对象实际上指向一个变量/列表/数组/无论在代码中而不是实际的文件?

电流:

with open('file.txt','w') as f: 
    method.write_info(f) 

with open('file.txt','r') as f: 
    info = f.readlines() 

我想要(或多或少,我只是用我很熟悉一样打开文件的语法):

with open(<some sort of variable>) as var_file: 
    method.write_info(var_file) 

#Then do whatever I want with the information 
print <some sort of variable> 

注:我m使用Python 2.7

+0

也许让继承包含该功能你原来的班级一个新的类,并重写/特别重写功能(更换写入文件的一部分写入到变量)在你的新班级? – xbb

回答

3

您可以使用StringIO object作为像文件一样工作的内存缓冲区。

+0

由于OP使用Python2,如果他不想以unicode字符串结尾,他也可以使用BytesIO。 –

1

实际上,任何实现write_info()使用的file api部分的对象都可以使用。假设write_info()只使用file.write(),下面会做:

class PseudoFile(object): 
    def __init__(self): 
     self.content = [] 

    def write(self, value): 
     self.content.append(value) 

    def __str__(self): 
     return "".join(map(str, self.content)) 

    def __repr__(self): 
     return str(self) 


f = PseudoFile() 
method.write_info(f) 
print f 
相关问题