WeHelp
學習各式各樣的內建函式、類別、物件、模組等等工具,完成各種 Python 基礎應用。
  1. 字串的操作
  2. 列表的操作
  3. 字典的操作
  4. 數學、統計模組
  5. 文字檔案讀取、寫入
  6. CSV 檔案讀取、寫入
  7. JSON 檔案讀取、寫入
  8. ZIP 壓縮檔案和解壓縮
  9. HTTP 網路連線請求
  10. 網頁爬蟲程式
  11. 日期與時間
  12. 正規表達式
CSV 檔案讀取、寫入
## 一、什麼是 CSV 檔案格式? CSV(Comma-Separated Values,逗號分隔值)是一種用純文字儲存表格資料的檔案格式。 例如以下內容: ```csv 姓名,年齡,城市 王小明,25,台北 李小華,30,高雄 ``` 其中: - 每一列代表一筆資料。 - 每一行通常代表一筆記錄。 - 欄位之間通常以逗號 `,` 分隔。 - 第一行常用來表示欄位名稱。 - 如果欄位內容本身包含逗號、換行或雙引號,通常會使用雙引號包住,例如: ```csv 姓名,備註 王小明,"喜歡閱讀, 旅行" ``` CSV 的優點是格式簡單、容易與 Excel、試算表及資料庫交換資料。不過 CSV 本身通常不保存資料型別,例如數字和日期讀取後多半會是字串,需要程式自行轉換。 --- ## 二、使用 Python 內建 `csv` 模組讀取 CSV Python 提供內建的 `csv` 模組,可以方便地讀取不同欄位的資料。 ### 實務範例:讀取員工資料並篩選部門 假設有一個 `employees.csv` 檔案: ```csv 姓名,部門,薪資 王小明,資訊部,50000 李小華,行銷部,42000 陳大文,資訊部,55000 ``` Python 程式如下: ```python import csv with open("employees.csv", mode="r", encoding="utf-8-sig", newline="") as file: reader = csv.DictReader(file) for employee in reader: if employee["部門"] == "資訊部": salary = int(employee["薪資"]) print(f'{employee["姓名"]} 的薪資是 {salary:,} 元') ``` 執行結果: ```text 王小明 的薪資是 50,000 元 陳大文 的薪資是 55,000 元 ``` ### 說明 - `csv.DictReader` 會將每一列資料讀成字典。 - 第一列的欄位名稱會成為字典的鍵,例如: ```python { "姓名": "王小明", "部門": "資訊部", "薪資": "50000" } ``` - CSV 讀出的資料預設都是字串,因此薪資需要透過 `int()` 轉換成整數。 - `encoding="utf-8-sig"` 可以較好地處理由 Excel 建立、包含 UTF-8 BOM 的中文 CSV 檔案。 - `newline=""` 是使用 `csv` 模組時的建議寫法,可避免空白行問題。 --- ## 三、使用 Python 內建 `csv` 模組寫入 CSV 可以使用 `csv.DictWriter` 將字典資料寫入 CSV 檔案。 ### 實務範例:將銷售資料寫入報表 ```python import csv sales = [ {"商品": "筆記型電腦", "數量": 2, "單價": 30000}, {"商品": "滑鼠", "數量": 5, "單價": 600}, {"商品": "鍵盤", "數量": 3, "單價": 1200}, ] with open("sales_report.csv", mode="w", encoding="utf-8-sig", newline="") as file: fieldnames = ["商品", "數量", "單價"] writer = csv.DictWriter(file, fieldnames=fieldnames) # 寫入欄位名稱 writer.writeheader() # 寫入資料 writer.writerows(sales) print("銷售報表已建立") ``` 產生的 `sales_report.csv` 內容如下: ```csv 商品,數量,單價 筆記型電腦,2,30000 滑鼠,5,600 鍵盤,3,1200 ``` ### 說明 - `fieldnames` 定義 CSV 欄位名稱及順序。 - `writeheader()` 寫入第一列欄位名稱。 - `writerows()` 一次寫入多筆字典資料。 - 使用 `mode="w"` 表示覆寫原有檔案。 - 若希望在原檔案後面追加資料,可使用: ```python open("sales_report.csv", mode="a", ...) ``` 但追加時通常不應再次呼叫 `writeheader()`,否則會重複寫入欄位名稱。 --- ## 四、常見的 CSV 操作類別 | 操作 | 使用方式 | |---|---| | 逐列讀取資料 | `csv.reader` | | 以欄位名稱讀取資料 | `csv.DictReader` | | 逐列寫入資料 | `csv.writer` | | 以字典方式寫入資料 | `csv.DictWriter` | 如果 CSV 使用的分隔符號不是逗號,例如使用分號,可以指定: ```python reader = csv.reader(file, delimiter=";") ``` 這使得 `csv` 模組也能處理其他類似表格格式的文字檔案。
相關學習地圖、教學課程
Python 資料工程
從 0 開始,成為資料工程師的學習路徑。
Python 後端工程、資料庫
從 0 開始,成為後端工程師的學習路徑。