csv --- CSV 檔案讀取及寫入

原始碼:Lib/csv.py


所謂的 CSV (Comma Separated Values) 檔案格式是試算表及資料庫中最常見的匯入、匯出檔案格式。在嘗試以 RFC 4180 中的標準化方式來描述格式之前,CSV 格式已經使用了許多年。由於缺少一個完善定義的標準,意味著各個不同的應用程式會在資料產生及銷毀時有微妙的差別。這些不同之處使得從不同資料來源處理 CSV 檔案時會非常擾人。儘管如此,雖然分隔符號和引號字元有所不同,整體的格式非常相似,可以寫個單一模組來高效率的操作這樣的資料,讓程式設計師可以隱藏讀取及寫入資料的細節。

csv 模組實作透過 class 去讀取、寫入 CSV 格式的表格資料。它讓程式設計師可以說出:「以 Excel 為首選並寫入該種格式的資料」或是「從 Excel 產生的檔案來讀取資料」,且無需知道這是 Excel 所使用的 CSV 格式等精確的細節。程式設計師也可以描述其他應用程式所理解的 CSV 格式或他們自行定義具有特殊意義的 CSV 格式。

csv 模組的 readerwriter 物件可以讀取及寫入序列。程式設計師也可以透過 DictReaderDictWriter class(類別)使用 dictionary (字典)讀取及寫入資料。

也參考

PEP 305 - CSV 檔案 API

Python Enhancement Proposal (PEP) 所提出的 Python 附加功能。

模組內容

csv 模組定義了以下函式:

csv.reader(csvfile, /, dialect='excel', **fmtparams)

回傳一個讀取器物件 (reader object) 並處理在指定的 csvfile 中的每一行,csvfile 必須是字串的可疊代物件 (iterable of strings),其中每個字串都要是讀取器所定義的 csv 格式,csvfile 通常是個類檔案物件或者 list。如果 csvfile 是個檔案物件,則需開啟時使用 newline=''[1] dialect 為一個可選填的參數,可以用為特定的 CSV dialect(方言) 定義一組參數。它可能為 Dialect 的一個子類別 (subclass) 的實例或是由 list_dialects() 函式回傳的多個字串中的其中之一。另一個可選填的關鍵字引數 fmtparams 可以在這個 dialect 中覆寫 (override) 個別的格式化參數 (formatting parameter)。關於 dialect 及格式化參數的完整說明,請見段落 Dialect 與格式參數

從 CSV 檔案讀取的每一列會回傳為一個字串列表。除非格式選項 QUOTE_NONNUMERIC 有被指定(在這個情況之下,沒有引號的欄位都會被轉換成浮點數),否則不會進行自動資料型別轉換。

一個簡短的用法範例:

>>> import csv
>>> with open('eggs.csv', newline='') as csvfile:
...     spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
...     for row in spamreader:
...         print(', '.join(row))
Spam, Spam, Spam, Spam, Spam, Baked Beans
Spam, Lovely Spam, Wonderful Spam
csv.writer(csvfile, /,