[英]f.write vs print >> f
至少有兩種方法可以在python中寫入文件:
f = open(file, 'w')
f.write(string)
要么
f = open(file, 'w')
print >> f, string # in python 2
print(string, file=f) # in python 3
兩者之間有區別嗎? 還是還有Pythonic? 我正在嘗試編寫一堆HTML文件,因此我需要通過文件編寫一堆write / print語句(但我不需要模板引擎)。
print
做事file.write
做不到,允許您跳過一些基本內容的字符串格式。
它在參數之間插入空格,並附加行終止符。
print "a", "b" # prints something like "a b\n"
它調用對象的__str__
或__repr__
特殊方法將其轉換為字符串。
print 1 # prints something like "1\n"
如果您使用file.write
而不是print
則必須手動執行這些操作。
我在這里表達的一些觀點有些不同意, print >> f
是多余的,應該避免使用f.write
。
print
和file.write
是完全不同的操作。 file.write
只是直接將字符串寫入文件。 print
更像是“將值作為文本渲染到標准輸出”。 自然地,將字符串呈現為文本的結果就是字符串,因此print >> f, my_string
和f.write(my_string)
幾乎可以互換(除了添加換行符)。 但是在file.write
和print
之間file.write
選擇通常應該基於您所做的事情。 您是將字符串寫入文件,還是將值呈現到文件?
當然, print
不是嚴格必需的 ,因為您可以使用file.write
實現它。 但是然后file.write
並不是嚴格必需的,因為您可以使用os
用於處理文件描述符的操作來實現它。 實際上,它們是在不同級別上進行的操作,因此您應該使用最適合您使用的級別(通常是其他附近代碼正在工作的級別,或者是您所無法達到的最高級別)。
我確實認為print >> f
語法相當糟糕,並且是一個很好的例子,說明了為什么print
應該一直是函數。 這是在Python 3.很大的改善,但即使你編寫Python 2的代碼,你打算移植到Python 3中,這是很容易轉換成print >> f, thing1, thing2, thing3, ...
到print(thing1, thing2, thing3, file=f)
比它要轉換的print(thing1, thing2, thing3, file=f)
在這里您滾動自己的代碼以執行等同於print
的呈現,然后調用f.write(text)
。 我敢肯定,從Python 2到Python 3的半自動轉換器甚至可以為您完成轉換,如果您避免使用print >> f
形式,則無法實現。
底線:使用print
將值渲染到stdout(或文件)。 使用f.write
將文本寫入文件。
您不應該做任何一件事情。 最Python化的事情是使用Python 3打印功能(與Python 2打印語句相反):
f = open(file, 'w')
print(string, file=f)
當然,理想的方法是僅使用Python3。但是,如果您仍然使用Python 2,則可以使用文件頂部的future語句將其打開:
from __future__ import print_function
請注意,此更改以其他方式顯示,最明顯的是,您需要在其參數周圍添加方括號。 但是這些更改都是臨時的,這就是Python 3進行更改的全部原因。在進行更改時,請考慮使用所有將來的語句從Python 3中獲得盡可能多的向后移植的改進。
同意@agf
我更喜歡print(..., file=f)
因為它具有靈活性。
with open('test.txt', 'w') as f:
print('str', file=f)
print(1, 20, file=f)
轉換現有的print
命令也很容易。
write
只接受字符串。
print
文檔可能會幫助解釋以下問題: 印刷版聲明 (Python 2.7文檔)。
print
,默認情況下,打印到標准輸出,這實際上是一個“類文件”的對象( sys.stdout
)。 標准輸出本身具有write()
方法。 使用print >> f
似乎是不必要的抽象。
另外,對我來說似乎太冗長了。 f.write()
很好。
作為bottonline:在寫入文件時,請使用file.write。
用於打印的“ >>”慣用語是在Python的早期從C ++借來的,它是非Python的-如此之多以至於它在Python 3.x中不再存在-在這里人們可以使用print,現在是函數而不是語句,寫入文件-但沒有特殊語法。
正如@agf指出的那樣,使用“ print”寫入文件比簡單地調用write可以做更多的事情-它會自動調用str(obj)以獲取對象的字符串表示形式,而.write則需要一個(字節)將字符串作為參數傳遞-在Python世界中,“顯式優於隱式”,因此,使用file.write的動機更大。
這是使用上下文處理程序的首選方法:
with open(file, 'w') as f:
f.write(string)
在python 2上,我更喜歡file.write
因為>>
語法已被棄用。 對於python 3,您可能更喜歡使用print函數,您應該注意它會做一些額外的事情(例如,為您自動將數字轉換為字符串等)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.