使用 Python 讀寫 CSV 文件(二)
來自專欄極光日報8 人贊了文章
簡評:Python 標準庫提供了讀寫 CSV 文件的庫,名為
csv
,使用csv
可以輕鬆應對各種 CSV 格式。本文將介紹使用 Python 的內置庫解析 CSV 文件的方法。
接上篇:使用 Python 讀寫 CSV 文件(一)
使用 csv 讀取 CSV 文件
csv 使用 reader
對象從 CSV 文件中讀取內容。首先使用 Python 內置的open()
函數(該函數返回一個文件對象)將 CSV 文件作為文本文件打開,然後將其傳遞給reader
對象,最後由reader
對象完成繁重的讀取工作。
下面是employee_birthday.txt
文件:
name,department,birthday monthJohn Smith,Accounting,NovemberErica Meyers,IT,March
下面是讀這個文件的代碼:
import csvwith open(employee_birthday.txt) as csv_file: csv_reader = csv.reader(csv_file, delimiter=,) line_count = 0 for row in csv_reader: if line_count == 0: print(fColumn names are {", ".join(row)}) line_count += 1 else: print(f {row[0]} works in the {row[1]} department, and was born in {row[2]}.) line_count += 1 print(fProcessed {line_count} lines.)
其運行結果是:
reader
對象返回的每一行都是一個 String 元素列表,其中包含刪除分隔符之後的數據。返回的第一行是列名,所以用特殊方式處理。
使用 csv 將 CSV 文件讀入字典
可以將 CSV 數據直接讀入字典(技術上,也可以是有序字典),而不去處理單個 String 列表。
同樣,我們的輸入文件 employee_birthday.txt 如下(沒變):
name,department,birthday monthJohn Smith,Accounting,NovemberErica Meyers,IT,March
下面是以字典形式讀取的代碼:
import csvwith open(employee_birthday.txt, mode=r) as csv_file: csv_reader = csv.DictReader(csv_file) line_count = 0 for row in csv_reader: if line_count == 0: print(fColumn names are {", ".join(row)}) line_count += 1 print(f {row["name"]} works in the {row["department"]} department, and was born in {row["birthday month"]}.) line_count += 1 print(fProcessed {line_count} lines.)
字典的鍵是從哪裡來的? 一般 CSV 文件的第一行用於構建字典的鍵。如果 CSV 文件中沒有這些,則應通過將 fieldsnames
可選參數設置為包含它們的列表來指定自己的字典鍵。
reader
對象的可選的參數
reader
對象可以通過指定附加參數,處理不同風格的 CSV 文件,其中一些如下所示:
delimiter
指定用於分隔每個欄位的字元,默認值為逗號(,)。quotechar
指定用於包圍包含分隔符字元的欄位的字元,默認值為雙引號(")。escapechar
指定用於轉義分隔符的字元,以防引號未使用。默認值為無轉義字元。
使用 csv 寫入 CSV 文件
也可以使用writer
對象和 write_row()
方法寫入 CSV 文件:
import csvwith open(employee_file.csv, mode=w) as employee_file: employee_writer = csv.writer(employee_file, delimiter=,, quotechar=", quoting=csv.QUOTE_MINIMAL) employee_writer.writerow([John Smith, Accounting, November]) employee_writer.writerow([Erica Meyers, IT, March])
quotechar
可選參數指定 writer
對象在寫入文件時使用哪個字元來引用欄位。
文件創建如下:
使用 csv 把字典寫入 CSV 文件
由於可以將數據讀入字典,因此應該能夠把字典寫入 CSV 文件:
import csvwith open(employee_file2.csv, mode=w) as csv_file: fieldnames = [emp_name, dept, birth_month] writer = csv.DictWriter(csv_file, fieldnames=fieldnames) writer.writeheader() writer.writerow({emp_name: John Smith, dept: Accounting, birth_month: November}) writer.writerow({emp_name: Erica Meyers, dept: IT, birth_month: March})
與DictReader
不同,在寫入字典時參數fieldnames
是必需的,這是有道理的:沒有欄位名列表的話,DictWriter
就無法知道使用哪些鍵來從字典中檢索值,它還使用欄位名中的鍵將第一行寫為列名。
上面的代碼會生成以下的輸出文件:
下篇: 使用 Python 讀寫 CSV 文件(三)
擴展閱讀:
- Pandas 的 Cheat Sheet(中文版)
- 使用 Python 格式化字元串
- 使用 Python 和 Click 編寫命令行應用程序
- Python:range 對象並不是迭代器
- 8102 年資深程序員一定要 follow 的 Python 博客/網站 Top 10
極光日報,極光開發者旗下媒體。
每天導讀三篇英文技術文章
原文:Reading and Writing CSV Files in Python – Real Python
推薦閱讀:
※msfconsole ms08_067 日記 2018.06.04
※探秘「棧」之旅
※工作效率太低怎麼辦?不如試試雙顯示屏或多顯示屏!
※網路編程懶人入門(六):深入淺出,全面理解HTTP協議