2013-10-12 66 views
1

我已經定義在我class foo
__str____repr__當我print foo(),它工作得很好。
當然,將stdout重定義爲file對象並調用print foo()會將字符串表示形式寫入文件,但這是否是最Python的方法?
寫入字符串表示到文件

回答

2
with open("Output.txt", "w") as outputFile: 
    print >>outputFile, foo() 

Python文檔建議使用with,在本節http://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects

在處理文件 對象時,最好使用with關鍵字。這具有如下優點:在 其套件結束後,即使在路上引發異常,該文件也能正確關閉。這是 也比寫等價的try-finally塊短得多:

+0

這是建議@jbarber建議的嗎?純粹出於好奇 –

+0

我相信是這樣的。閱讀或寫作時,我不用擔心在使用'with'時關閉文件。 – thefourtheye

2

如果您正在使用Python 2.7,你可以暫時直接打印以這種方式到stdout:

>>> print >> open('test.txt', 'w'), 'test string' 

如果您正在使用Python 3.3,你可以暫時直接打印以這種方式到stdout:

>>> print('test string', file=open('test.txt', 'w')) 

這兩種方法都允許您臨時切換輸出。

由於deque的星圖部分SETATTR指出以下,在Python 2.7,你也可以暫時直接打印以這種方式到stdout:

>>> from __future__ import print_function 
>>> print('test string', file=open('test.txt', 'w')) 
+0

第二種形式也可在Python 2與'從__future__進口print_function' – SingleNegationElimination

+0

@deque星圖部分SETATTR好一點。 –

+0

接受@thefourtheye的答案是因爲他提到了使用'with'時文件處理關閉的保證。如果在打印完成後手柄仍處於打開狀態,您將如何進行測試?沒有一種方法可以在不給名稱的情況下引用對象,對吧?也許'id'可以以某種方式使用 –

1

調用對象上strrepr,就像這樣:

with open('somefile.txt', 'w') as f: 
    f.write(repr(foo())) 
+0

爲什麼我需要'io'? –

+1

你沒有說你的程序是在Python 2還是Python 3上運行,並且'io.open'恰好適用於這兩者。 – phihag

+0

so'open('somefile','w')as f:f.write()'不起作用。但'io.open'會?那很有意思。 –