簡體   English   中英

f。寫vs打印>> f

[英]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

printfile.write是完全不同的操作。 file.write只是直接將字符串寫入文件。 print更像是“將值作為文本渲染到標准輸出”。 自然地,將字符串呈現為文本的結果就是字符串,因此print >> f, my_stringf.write(my_string) 幾乎可以互換(除了添加換行符)。 但是在file.writeprint之間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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM