iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0

第十七天:使用 Python 處理 CSV 文件

內容概述:

今天我們將學習如何使用 Python 處理 CSV 文件。CSV(Comma Separated Values)是常見的資料存儲格式,通常用於儲存表格數據。我們將介紹 Python 中的 csv 模組,它讓我們能夠讀取、寫入、和操作 CSV 文件。透過這個課程,學生可以掌握處理表格數據的技巧,這在數據分析和資料儲存時相當有用。


一、什麼是 CSV 文件?

CSV 文件是一種純文本文件格式,每行代表一條數據,每個數據項目之間用逗號分隔。這種格式通常用於儲存表格數據,例如 Excel 或 Google Sheets 文件中的數據可以匯出為 CSV 格式,方便跨平台分享和處理。

CSV 文件結構簡單,適合用來儲存和交換結構化數據。

範例 CSV 文件內容:

姓名, 年齡, 職業
小明, 25, 工程師
小美, 30, 設計師
小李, 28, 醫生

二、使用 Python 讀取 CSV 文件

在 Python 中,csv 模組能夠幫助我們讀取和解析 CSV 文件。讓我們從讀取 CSV 文件開始。

1. 基本讀取操作:

首先,我們需要打開一個 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 逐行讀取數據。
2. 忽略標題行:

在很多情況下,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)

三、使用 Python 寫入 CSV 文件

寫入 CSV 文件與讀取類似,我們可以使用 csv.writer 寫入數據到文件中。

1. 基本寫入操作:
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='' 確保每次寫入時不會出現空行。
2. 寫入單行數據:

如果你只需要寫入單行數據,可以使用 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 文件

除了使用列表來讀寫數據,csv.DictReadercsv.DictWriter 允許我們使用字典的形式來操作 CSV 文件,這讓代碼更加直觀。

1. 使用字典讀取 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 文件的標題,值是該行對應的數據。
2. 使用字典寫入 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 文件時,讀取整個文件可能會消耗過多的記憶體。這時,我們可以逐行讀取文件並按需處理。

1. 使用迭代器逐行讀取大文件:
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 文件時,有時候數據格式可能會出現問題,這會導致程式報錯。讓我們看看如何處理常見的錯誤情況。

1. 缺失數據:

有時候 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)
2. 異常處理:

使用 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("該行數據不完整,跳過")

七、應用實例

1. 分析銷售數據:

假設我們有一個 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}")
2. 生成報表:

從 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:

  • 建立一個包含五筆資料的 CSV 文件,並寫一個 Python 程式來讀取和打印出每一行數據。
練習 2:
  • 編寫一個 Python 程式,將兩個新的數據行寫入到已經存在的 CSV 文件中,並確保文件原有數據不會被覆蓋。

總結

今天我們學習了如何使用 Python 處理 CSV 文件,包含讀取、寫入及數據處理的各種技巧。掌握這項技能後,我們可以更加方便地進行數據分析和報表生成。

**明這些練習涉及到 CSV 文件的讀取和寫入操作,展示了如何處理 CSV 格式的文件。下面提供每個練習的詳細說明與範例代碼。


練習 1:建立一個包含五筆資料的 CSV 文件,並讀取和打印每一行數據
步驟:
  1. 先手動或程式創建一個 CSV 文件,包含五筆數據。
  2. 寫一個 Python 程式來讀取該文件並逐行打印。

範例代碼:

  1. 手動建立 CSV 文件(範例 data.csv):
姓名,年齡,城市
張三,25,台北
李四,30,高雄
王五,22,新北
趙六,28,台中
孫七,35,台南
  1. 讀取 CSV 文件的 Python 程式
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):將列表中的每個元素用逗號連接,方便顯示。

練習 2:將兩個新的數據行寫入到已經存在的 CSV 文件中,並確保不會覆蓋原有數據
步驟:
  1. 讀取已存在的 CSV 文件。
  2. 使用 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 格式及其操作技巧


上一篇
跟著 ChatGPT成為程式大佬!Python 網頁抓取(Web Scraping)
下一篇
跟著 ChatGPT成為程式大佬!Python 中的日期和時間
系列文
如果讓chatgpt參加iThome鐵人賽,他竟然寫出...!?31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言