在 Python 中讀取帶有標題的 CSV
Python 是一種明確且易於理解的通用程式語言。
Python 是全球排名前五的程式語言之一,因為它具有簡單的語法和許多適用於多個領域的實用程式,例如機器學習、資料科學、遊戲開發、Web 開發、應用程式開發等。感謝在背後工作的 API 場景。
Python 使檔案處理成為一項無縫任務。我們可以使用 Python 輕鬆建立檔案、讀取檔案、追加資料或覆蓋現有檔案中的資料,因為它可以處理許多檔案格式,例如 txt
、csv
、xlsx
、pdf
等。
此外,它有許多開源包,使檔案處理更高效、更簡單。
我們將在本文中學習如何使用 Python 讀取 CSV 檔案及其標題。為了保持一致,我們將在程式碼片段中使用示例檔案進行說明。你可以從此處下載此 CSV 檔案。前面的示例將 CSV 檔案的第一行視為其標題。
在 Python 中讀取帶有標題的 CSV
Python 有一個 csv
包,我們可以用它來讀取 CSV 檔案。這個包預設存在於官方 Python 安裝中。
csv
包有一個 reader()
方法,我們可以用它來讀取 CSV 檔案。它返回一個可迭代物件,我們可以遍歷該物件以列印正在讀取的 CSV 檔案的內容。
from csv import reader
file_name = "email.csv"
with open(file_name, "r") as csv_file:
csv_reader = reader(csv_file)
for row in csv_reader:
print(row)
輸出:
['Login email', 'Identifier', 'First name', 'Last name']
['laura@example.com', '2070', 'Laura', 'Grey']
['craig@example.com', '4081', 'Craig', 'Johnson']
['mary@example.com', '9346', 'Mary', 'Jenkins']
['jamie@example.com', '5079', 'Jamie', 'Smith']
上述解決方案的時間複雜度為 O(n)
。
正如我們所看到的,輸出顯示第一行是標題,其他行是值。我們可以通過將標題儲存在單獨的變數中並以合適的格式列印所有內容來進一步美化輸出。
from csv import reader
file_name = "email.csv"
with open(file_name, "r") as csv_file:
csv_reader = reader(csv_file)
header = next(csv_reader)
print("Header:")
print(", ".join(header))
print("Values:")
for row in csv_reader:
print(", ".join(row))
輸出:
Header:
Login email, Identifier, First name, Last name
Values:
laura@example.com, 2070, Laura, Grey
craig@example.com, 4081, Craig, Johnson
mary@example.com, 9346, Mary, Jenkins
jamie@example.com, 5079, Jamie, Smith
上述解決方案的時間複雜度為 O(n)
。
在上面的程式碼中,csv_reader
是可迭代的。使用 next()
方法,我們首先從 csv_reader
獲取標題,然後使用 for
迴圈迭代這些值。
顧名思義,CSV 檔案具有逗號分隔的值。
有時,CSV 檔案中的值不是用逗號分隔的;他們可以使用分號 (;
)、冒號 (:
) 等作為分隔符。在這種情況下,可以使用 csv
包中的 reader()
方法的 delimiter
引數。
delimiter
引數接受一個字串或一個應該被視為分隔符的字元。例如,如果 CSV 檔案具有 ;
作為其分隔符,讀取此類 CSV 檔案的程式碼如下。
from csv import reader
file_name = "email.csv"
with open(file_name, "r") as csv_file:
csv_reader = reader(csv_file, delimiter = ";") # Important
header = next(csv_reader)
print("Header:")
print(", ".join(header))
print("Values:")
for row in csv_reader:
print(", ".join(row))
輸出:
Header:
Login email, Identifier, First name, Last name
Values:
laura@example.com, 2070, Laura, Grey
craig@example.com, 4081, Craig, Johnson
mary@example.com, 9346, Mary, Jenkins
jamie@example.com, 5079, Jamie, Smith