Python 中的寫入行
本教程將介紹和解釋 Python 中 write()
和 writelines()
方法之間的區別。
在 Python 中使用 write()
和 writelines()
方法將指定文字寫入檔案
write()
方法需要一個字串作為引數並將其寫入檔案。如果我們提供一個字串列表,它將引發異常。writelines()
方法需要一個可迭代的引數。此外,write()
方法顯示輸出但不提供換行符,而 writelines()
方法顯示輸出並在字串末尾提供換行符。重要的是要注意 writelines()
不會在迭代中的每個專案後自動插入一個新行。我們必須自己提供一條新線路。如果我們有很多行要寫入檔案,writelines()
可能是更好的選擇。它表現良好,因為它不建立臨時連線字串,只是遍歷行。
在下面的程式中,我們以寫模式開啟了檔案 samplefile.txt
。lines
變數是一個元組,即一個不可變的字串集合。當我們嘗試執行程式時,它引發了異常型別的錯誤。我們提供給 write()
方法的引數是一個導致錯誤的元組。在這裡,我們使用 with
方法進行檔案處理。此方法提供了更好的語法和異常處理。因此,在適用的情況下使用 with
方法是一種很好的做法。該方法很有用,因為任何開啟的檔案都將在完成後關閉。
示例程式碼:
# python 3.x
nl = "\n"
line1 = "Good"
line2 = "Morning"
line3 = "Sunshine"
lines = line1, nl, line2, nl, line3, nl
with open("samplefile.txt", "w") as f:
f.write(lines)
輸出:
TypeError: write() argument must be str, not tuple
在類似的上下文中,當我們使用 writelines()
時,程式會成功執行,並建立一個名為 samplefile.txt
的檔案,其中 lines
作為引數傳遞給 writelines()
方法。
示例程式碼:
# python 3.x
nl = "\n"
line1 = "Good"
line2 = "Morning"
line3 = "Sunshine"
lines = line1, nl, line2, nl, line3, nl
with open("samplefile.txt", "w") as f:
f.writelines(lines)
輸出:
Good
Morning
Sunshine
對於同一個程式,多行連線到一個名為 lines_joined
的字串變數,它很容易被接受為 write()
方法的引數。
示例程式碼:
# python 3.x
nl = "\n"
line1 = "Good"
line2 = "Morning"
line3 = "Sunshine"
lines_joined = line1 + nl + line2 + nl + line3 + nl
with open("samplefile.txt", "w") as f:
f.write(lines_joined)
輸出:
Good
Morning
Sunshine
在 Python 中使用 write()
和 writelines()
方法將可迭代物件寫入檔案
join()
方法獲取可迭代物件中的所有專案並將它們連線成一個字串。在下面的程式中,我們使用了 join()
方法和 '\n'
作為粘合劑來連線 lines
中的字串。這是一種更好的串聯方法,而不是使用 +
運算子。
示例程式碼:
# python 3.x
lines = ["Hello", "World"]
with open("hello.txt", "w") as f:
f.write("\n".join(lines))
輸出:
Hello
World
對極長的字串列表使用 join()
方法效率較低。在這種情況下,會在寫入之前在記憶體中建立一個全新的非常長的字串。因此,在下面的程式中,我們使用生成器表示式將字串寫入換行符。在這裡,資料是分段寫入的。
示例程式碼:
# python 3.x
lines = ["Hello", "World"]
with open("hello.txt", "w") as f:
for l in lines:
f.write("%s\n" % l)
輸出:
Hello
World
與上面相同的程式是通過 writelines()
方法實現的。它使用生成器表示式並動態建立以換行符結尾的字串。writelines()
方法迭代這個字串序列並寫入每個專案。
示例程式碼:
# python 3.x
lines = ["Hello", "World"]
with open("hello.txt", "w") as file:
file.writelines("%s\n" % t for t in texts)
輸出:
Hello
World