使用 Python 讀寫 CSV 文件(二)

使用 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協議

TAG:Python | 科技 | 計算機科學 |