- Python 資料持久化教程
- Python 資料持久化 - 首頁
- Python 資料持久化 - 簡介
- Python 資料持久化 - 檔案 API
- 使用 os 模組處理檔案
- Python 資料持久化 - 物件序列化
- Python 資料持久化 - Pickle 模組
- Python 資料持久化 - Marshal 模組
- Python 資料持久化 - Shelve 模組
- Python 資料持久化 - dbm 包
- Python 資料持久化 - CSV 模組
- Python 資料持久化 - JSON 模組
- Python 資料持久化 - XML 解析器
- Python 資料持久化 - Plistlib 模組
- Python 資料持久化 - Sqlite3 模組
- Python 資料持久化 - SQLAlchemy
- Python 資料持久化 - PyMongo 模組
- Python 資料持久化 - Cassandra 驅動程式
- 資料持久化 - ZODB
- 資料持久化 - Openpyxl 模組
- Python 資料持久化資源
- Python 資料持久化 - 快速指南
- Python 資料持久化 - 有用資源
- Python 資料持久化 - 討論
Python 資料持久化 - CSV 模組
CSV 代表逗號分隔值。此檔案格式是匯出/匯入資料庫中電子表格和資料表資料的常用資料格式。csv 模組作為 PEP 305 的結果被納入 Python 的標準庫中。它提供了根據 PEP 305 的建議對 CSV 檔案執行讀/寫操作的類和方法。
CSV 是 Microsoft Excel 電子表格軟體的首選匯出資料格式。但是,csv 模組也可以處理其他方言表示的資料。
CSV API 介面包含以下寫入器和讀取器類:
writer()
csv 模組中的此函式返回一個寫入器物件,該物件將資料轉換為分隔字串並存儲在檔案物件中。該函式需要一個具有寫入許可權的檔案物件作為引數。寫入檔案中的每一行都會發出換行符。為了防止行之間出現額外的空格,newline 引數設定為 ''。
writer 類具有以下方法:
writerow()
此方法寫入可迭代物件(列表、元組或字串)中的專案,並用逗號字元分隔它們。
writerows()
此方法將可迭代物件的列表作為引數,並將每個專案寫入檔案中的逗號分隔專案行。
示例
以下示例顯示了 writer() 函式的使用。首先,一個檔案以 'w' 模式開啟。此檔案用於獲取寫入器物件。然後,使用 writerow() 方法將元組列表中的每個元組寫入檔案。
import csv
persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
csvfile=open('persons.csv','w', newline='')
obj=csv.writer(csvfile)
for person in persons:
obj.writerow(person)
csvfile.close()
輸出
這將在當前目錄中建立 'persons.csv' 檔案。它將顯示以下資料。
Lata,22,45 Anil,21,56 John,20,60
我們可以使用 writerows() 方法,而不是迭代列表以單獨寫入每一行。
csvfile=open('persons.csv','w', newline='')
persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
obj=csv.writer(csvfile)
obj.writerows(persons)
obj.close()
reader()
此函式返回一個讀取器物件,該物件返回csv 檔案中行的迭代器。在以下示例中,使用常規的 for 迴圈顯示檔案中的所有行:
示例
csvfile=open('persons.csv','r', newline='')
obj=csv.reader(csvfile)
for row in obj:
print (row)
輸出
['Lata', '22', '45'] ['Anil', '21', '56'] ['John', '20', '60']
讀取器物件是一個迭代器。因此,它支援 next() 函式,該函式也可用於顯示 csv 檔案中的所有行,而不是for 迴圈。
csvfile=open('persons.csv','r', newline='')
obj=csv.reader(csvfile)
while True:
try:
row=next(obj)
print (row)
except StopIteration:
break
如前所述,csv 模組使用 Excel 作為其預設方言。csv 模組還定義了一個方言類。方言是一組用於實現 CSV 協議的標準。可以使用 list_dialects() 函式獲取可用方言的列表。
>>> csv.list_dialects() ['excel', 'excel-tab', 'unix']
除了可迭代物件之外,csv 模組還可以將字典物件匯出到 CSV 檔案並讀取它以填充 Python 字典物件。為此,此模組定義了以下類:
DictWriter()
此函式返回一個 DictWriter 物件。它類似於 writer 物件,但行對映到字典物件。該函式需要一個具有寫入許可權的檔案物件以及字典中使用的鍵列表作為 fieldnames 引數。這用於在檔案中寫入第一行作為標題。
writeheader()
此方法將字典中的鍵列表作為逗號分隔行寫入檔案中的第一行。
在以下示例中,定義了一個字典項列表。列表中的每個專案都是一個字典。使用 writrows() 方法,它們以逗號分隔的方式寫入檔案。
persons=[
{'name':'Lata', 'age':22, 'marks':45},
{'name':'Anil', 'age':21, 'marks':56},
{'name':'John', 'age':20, 'marks':60}
]
csvfile=open('persons.csv','w', newline='')
fields=list(persons[0].keys())
obj=csv.DictWriter(csvfile, fieldnames=fields)
obj.writeheader()
obj.writerows(persons)
csvfile.close()
persons.csv 檔案顯示以下內容:
name,age,marks Lata,22,45 Anil,21,56 John,20,60
DictReader()
此函式從底層 CSV 檔案返回一個 DictReader 物件。與讀取器物件一樣,它也是一個迭代器,可以使用它檢索檔案的內容。
csvfile=open('persons.csv','r', newline='')
obj=csv.DictReader(csvfile)
該類提供 fieldnames 屬性,返回用作檔案標題的字典鍵。
print (obj.fieldnames) ['name', 'age', 'marks']
使用迴圈遍歷 DictReader 物件以獲取各個字典物件。
for row in obj: print (row)
這將產生以下輸出:
OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
OrderedDict([('name', 'Anil'), ('age', '21'), ('marks', '56')])
OrderedDict([('name', 'John'), ('age', '20'), ('marks', '60')])
要將 OrderedDict 物件轉換為普通字典,我們必須首先從 collections 模組匯入 OrderedDict。
from collections import OrderedDict
r=OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
dict(r)
{'name': 'Lata', 'age': '22', 'marks': '45'}