2017-03-02 82 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 
相關問題