今天我們將學習如何使用 Python 處理 CSV 文件。CSV(Comma Separated Values)是常見的資料存儲格式,通常用於儲存表格數據。我們將介紹 Python 中的 csv
模組,它讓我們能夠讀取、寫入、和操作 CSV 文件。透過這個課程,學生可以掌握處理表格數據的技巧,這在數據分析和資料儲存時相當有用。
CSV 文件是一種純文本文件格式,每行代表一條數據,每個數據項目之間用逗號分隔。這種格式通常用於儲存表格數據,例如 Excel 或 Google Sheets 文件中的數據可以匯出為 CSV 格式,方便跨平台分享和處理。
CSV 文件結構簡單,適合用來儲存和交換結構化數據。
範例 CSV 文件內容:
姓名, 年齡, 職業
小明, 25, 工程師
小美, 30, 設計師
小李, 28, 醫生
在 Python 中,csv
模組能夠幫助我們讀取和解析 CSV 文件。讓我們從讀取 CSV 文件開始。
首先,我們需要打開一個 CSV 文件,然後使用 csv.reader
來解析數據。
import csv
with open('example.csv', mode='r', encoding='utf-8') as file:
csv_reader = csv.reader(file)
for row in csv_reader:
print(row) # 打印每一行數據
open()
用於打開 CSV 文件。csv.reader
解析文件內容並返回每一行作為一個列表。for row in csv_reader
逐行讀取數據。在很多情況下,CSV 文件的第一行是標題行。我們可以使用 next()
函數跳過第一行。
with open('example.csv', mode='r', encoding='utf-8') as file:
csv_reader = csv.reader(file)
header = next(csv_reader) # 跳過標題行
print("標題:", header)
for row in csv_reader:
print(row)
寫入 CSV 文件與讀取類似,我們可以使用 csv.writer
寫入數據到文件中。
import csv
data = [
['姓名', '年齡', '職業'],
['小明', '25', '工程師'],
['小美', '30', '設計師'],
['小李', '28', '醫生']
]
with open('output.csv', mode='w', newline='', encoding='utf-8') as file:
csv_writer = csv.writer(file)
csv_writer.writerows(data) # 寫入多行數據
writerows()
用來一次性寫入多行數據。newline=''
確保每次寫入時不會出現空行。如果你只需要寫入單行數據,可以使用 writerow()
。
with open('output.csv', mode='a', newline='', encoding='utf-8') as file:
csv_writer = csv.writer(file)
csv_writer.writerow(['小王', '35', '律師']) # 追加一行數據
mode='a'
表示以追加模式打開文件,這樣新的數據會添加到文件末尾而不會覆蓋原有數據。除了使用列表來讀寫數據,csv.DictReader
和 csv.DictWriter
允許我們使用字典的形式來操作 CSV 文件,這讓代碼更加直觀。
import csv
with open('example.csv', mode='r', encoding='utf-8') as file:
csv_reader = csv.DictReader(file)
for row in csv_reader:
print(row['姓名'], row['職業']) # 使用列名來獲取數據
DictReader
會將每一行數據轉換為字典,鍵是 CSV 文件的標題,值是該行對應的數據。import csv
fieldnames = ['姓名', '年齡', '職業']
data = [
{'姓名': '小明', '年齡': 25, '職業': '工程師'},
{'姓名': '小美', '年齡': 30, '職業': '設計師'},
{'姓名': '小李', '年齡': 28, '職業': '醫生'}
]
with open('output.csv', mode='w', newline='', encoding='utf-8') as file:
csv_writer = csv.DictWriter(file, fieldnames=fieldnames)
csv_writer.writeheader() # 寫入標題行
csv_writer.writerows(data) # 寫入數據
DictWriter
允許我們使用字典的形式寫入數據,並且 writeheader()
會自動寫入標題行。當我們處理非常大的 CSV 文件時,讀取整個文件可能會消耗過多的記憶體。這時,我們可以逐行讀取文件並按需處理。
with open('large_file.csv', mode='r', encoding='utf-8') as file:
csv_reader = csv.reader(file)
for row in csv_reader:
# 在這裡處理每一行數據
print(row)
這樣可以避免一次性讀取整個文件佔用過多記憶體。
在處理 CSV 文件時,有時候數據格式可能會出現問題,這會導致程式報錯。讓我們看看如何處理常見的錯誤情況。
有時候 CSV 文件中的某些行可能缺少某些欄位。我們可以使用條件判斷來跳過這些行。
with open('example.csv', mode='r', encoding='utf-8') as file:
csv_reader = csv.reader(file)
for row in csv_reader:
if len(row) < 3:
print("缺失數據,跳過該行")
continue
print(row)
使用 try-except
可以捕捉程式運行中的異常,保證程式不會因為錯誤而中斷。
with open('example.csv', mode='r', encoding='utf-8') as file:
csv_reader = csv.reader(file)
for row in csv_reader:
try:
print(row[0], row[1]) # 嘗試打印數據
except IndexError:
print("該行數據不完整,跳過")
假設我們有一個 CSV 文件儲存著銷售數據,我們可以讀取並分析這些數據,計算總銷售額。
import csv
total_sales = 0
with open('sales_data.csv', mode='r', encoding='utf-8') as file:
csv_reader = csv.DictReader(file)
for row in csv_reader:
total_sales += float(row['銷售額'])
print(f"總銷售額:{total_sales}")
從 CSV 文件中提取數據後,我們可以自動生成簡單的報表,輸出到另一個 CSV 文件。
with open('report.csv', mode='w', newline='', encoding='utf-8') as file:
csv_writer = csv.writer(file)
csv_writer.writerow(['產品名稱', '銷售總額']) # 寫入標題
csv_writer.writerow(['產品A', '1000']) # 假設數據
csv_writer.writerow(['產品B', '1500'])
練習 1:
今天我們學習了如何使用 Python 處理 CSV 文件,包含讀取、寫入及數據處理的各種技巧。掌握這項技能後,我們可以更加方便地進行數據分析和報表生成。
**明這些練習涉及到 CSV 文件的讀取和寫入操作,展示了如何處理 CSV 格式的文件。下面提供每個練習的詳細說明與範例代碼。
data.csv
):姓名,年齡,城市
張三,25,台北
李四,30,高雄
王五,22,新北
趙六,28,台中
孫七,35,台南
import csv
# 讀取 CSV 文件並打印每一行數據
def read_csv(file_name):
with open(file_name, newline='', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
# 打印每一行數據
for row in reader:
print(', '.join(row))
# 測試讀取 CSV 文件
read_csv('data.csv')
csv.reader()
:用於讀取 CSV 文件,每一行作為一個列表。', '.join(row)
:將列表中的每個元素用逗號連接,方便顯示。append
模式寫入兩行新數據,確保不覆蓋原有的數據。import csv
# 將新的數據行追加到 CSV 文件中
def append_to_csv(file_name, new_rows):
# 使用 'a' 模式進行追加寫入,newline='' 防止空行
with open(file_name, mode='a', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
# 寫入新的數據行
writer.writerows(new_rows)
# 新的數據行
new_data = [
['吳八', 26, '桃園'],
['陳九', 29, '新竹']
]
# 將新數據行寫入 CSV 文件
append_to_csv('data.csv', new_data)
# 測試讀取文件,驗證是否追加成功
read_csv('data.csv')
'a'
模式:以追加模式打開文件,確保不覆蓋原有的內容。writer.writerows()
:可以一次寫入多行數據。這兩個練習展示了如何讀取和寫入 CSV 文件,並使用追加模式將新數據行寫入文件而不覆蓋現有的數據。
明天的主題:學習 JSON 格式及其操作技巧