首頁 > 軟體

Python實現將內容寫入檔案的五種方法總結

2023-09-07 18:00:34

一、write()方法

使用 write() 方法:使用 open() 函數開啟檔案,然後使用 write() 方法將內容寫入檔案。例如:

with open('example.txt', 'w') as f:
    f.write('Hello, world!')

open() 函數是 Python 內建的用於開啟檔案的函數,其常用的引數及其含義如下:

1.file: 檔名或檔案路徑。可以是絕對路徑或相對路徑。如果是相對路徑,則相對於當前工作目錄。如果省略了路徑,就在當前工作目錄中開啟檔案。

2.mode: 檔案開啟模式。可以是以下值之一:

  • 'r': 唯讀模式。預設模式,如果檔案不存在,會引發異常。
  • 'w': 寫模式。如果檔案不存在,則建立檔案。如果檔案已存在,則清空檔案並寫入新內容。
  • 'x': 獨佔建立模式。如果檔案不存在,則建立檔案。如果檔案已存在,則引發異常。
  • 'a': 追加模式。如果檔案不存在,則建立檔案。如果檔案已存在,則將新內容新增到檔案末尾。
  • 'b': 二進位制模式。與其他模式一起使用,例如 'rb' 或 'wb'。
  • 't': 文字模式。與其他模式一起使用,例如 'rt' 或 'wt'。

3.buffering: 設定緩衝區的大小。如果省略或為0,則不進行緩衝。如果為1,則行緩衝。如果大於1,則為緩衝區大小。

4.encoding: 用於編碼和解碼檔案內容的編碼格式。如果省略,使用預設編碼。

5.errors: 編碼和解碼檔案內容時遇到錯誤時的處理方式。可以是以下值之一:

  • 'strict': 預設值,表示遇到錯誤時引發異常。
  • 'ignore': 忽略錯誤。
  • 'replace': 用 '?' 替換錯誤的字元。
  • 'backslashreplace': 用反斜槓跳脫替換錯誤的字元。
  • 'xmlcharrefreplace': 用 XML 實體替換錯誤的字元。
  • 'namereplace': 用 N{...} 跳脫替換錯誤的字元。

6.newline: 控制文字模式下的換行符處理方式。可以是以下值之一:

  • None: 使用預設換行符 n。
  • '': 不進行換行符轉換。
  • 'n', 'r', 'rn', 'u2028', 'u2029': 使用指定的換行符。

7.closefd: 如果為 True,則表示將在開啟檔案時關閉其底層檔案描述符。預設為 True。

8.opener: 用於開啟檔案的自定義函數或類。預設為 None。

這些引數可以以不同的組合使用,以滿足對檔案的不同操作需求。例如,open('example.txt', 'w') 會以寫模式開啟名為 example.txt 的檔案,如果檔案不存在,則建立一個新的空檔案。 

二、writelines() 方法

writelines() 方法將一個字串列表寫入檔案。例如:

with open('example.txt', 'w') as f:
    lines = ['Hello, world!', 'Welcome to Python']
    f.writelines(lines)

writelines() 方法是用於將字串列表寫入檔案的方法。但是需要注意以下幾點: 

  • writelines() 方法只接受字串列表作為引數。如果要寫入單個字串,請使用 write() 方法。
  • writelines() 方法不會在字串之間自動新增換行符,需要手動將其新增到字串中。
  • writelines() 方法不會在列表的最後新增空行,如果需要在最後一行新增空行,請手動新增一個包含換行符的空字串。
  • 在使用 writelines() 方法時,需要保證傳遞的引數是一個字串列表。如果引數是一個生成器物件,需要將其轉換為列表再傳遞。
lines = ['line 1n', 'line 2n', 'line 3n']
 
with open('example.txt', 'w') as f:
    f.writelines(lines)

方法的高階用法主要是將迭代器物件中的資料寫入檔案,而不需要將其一次性轉換為列表。這種用法對於大型資料集合很有用,因為它可以逐個迭代元素,避免將所有元素儲存在記憶體中。

def generate_lines():
    yield 'line 1n'
    yield 'line 2n'
    yield 'line 3n'
 
with open('example.txt', 'w') as f:
    f.writelines(generate_lines())

在上面的程式碼中,generate_lines() 函數返回一個迭代器物件,它逐個生成字串。然後,將這個迭代器物件傳遞給 writelines() 方法,writelines() 方法將迭代器物件中的字串逐個寫入檔案。

三、print() 函數

可以使用 print() 函數向檔案寫入內容,需要指定 file 引數為開啟的檔案物件。例如:

with open('example.txt', 'w') as f:
    print('Hello, world!', file=f)

以下是 print() 函數的常用引數及其詳細介紹:

print() 函數是 Python 中用於列印輸出資訊到終端的內建函數。print() 函數可以接受多個引數,並將它們列印輸出到終端。

以下是 print() 函數的常用引數及其詳細介紹:

print(*objects, sep=' ', end='n', file=sys.stdout, flush=False)

  • *objects:一個或多個要列印輸出的物件,可以是字串、數位、變數等。可以接受任意數量的引數。
  • sep:用於分隔多個引數的字元,預設是一個空格。在列印輸出多個引數時,sep 引數將作為它們之間的分隔符。
  • end:用於表示列印輸出結束的字元,預設是一個換行符。在列印輸出最後一個引數之後,end 引數將作為它們之後的字元。
  • file:用於指定輸出的檔案物件,預設是標準輸出裝置 sys.stdout。可以將輸出重定向到檔案中,以便將輸出儲存到檔案中而不是終端。
  • flush:用於指定是否立即重新整理緩衝區,預設為 False。如果將 flush 引數設定為 True,則輸出將立即寫入檔案,而不是等待緩衝區滿了再寫入。
# 列印輸出單個字串
print("Hello World")
 
# 列印輸出多個引數
print("Name:", "John", "Age:", 25)
 
# 使用自定義分隔符
print("Name:", "John", "Age:", 25, sep="-")
 
# 使用自定義結束符
print("Name:", "John", "Age:", 25, end=".")
 
# 將輸出重定向到檔案
with open('output.txt', 'w') as f:
    print("Hello World", file=f)
 
# 立即重新整理緩衝區
print("Hello World", flush=True)

print(string, *args, **kwargs)

  • string:格式化字串,其中包含要列印輸出的資訊和格式化預留位置。格式化預留位置用花括號 {} 包裹,並指定要填充的資料的型別、寬度、精度等資訊。
  • *args:可選引數,包含要填充到格式化字串中的資料。
  • **kwargs:可選引數,包含鍵值對,用於指定格式化字串中的預留位置的值。
name = "John"
age = 25
 
# 使用預留位置輸出字串
print("Name: {}, Age: {}".format(name, age))
 
# 使用關鍵字引數輸出字串
print("Name: {n}, Age: {a}".format(n=name, a=age))
 
# 使用 f-string 輸出字串
print(f"Name: {name}, Age: {age}")

四、使用 csv 模組

可以使用 csv 模組將資料寫入 CSV 檔案。例如:

import csv
 
with open('example.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['Name', 'Age', 'Gender'])
    writer.writerow(['Alice', 25, 'F'])
    writer.writerow(['Bob', 30, 'M'])

五、使用 json 模組

可以使用 json 模組將 Python 物件寫入 JSON 檔案。例如:

import json
 
data = {
    'name': 'Alice',
    'age': 25,
    'gender': 'F'
}
 
with open('example.json', 'w') as f:
    json.dump(data, f)

到此這篇關於Python實現將內容寫入檔案的五種方法總結的文章就介紹到這了,更多相關Python內容寫入檔案內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com