本篇介紹如何用 python read csv 檔案,csv 檔案格式是常用格式,以下將示範如何用 python 的內建 csv 模組來讀取 csv 檔案。
以下是 Python 讀取 csv 的幾個章節,分為這幾部份,
相似於C語言的寫法
使用 with open(…) as …
取出第一欄欄位名稱 headers
將讀取的欄位轉換變數類型存到串列 list 裡
將讀取的 csv 內容轉成 NumPy array
使用 NumPy 的 genfromtxt 來讀取 csv
相似於C語言的寫法 以下範例是將 data.csv 檔案讀取近來後, 之後將每行的內容印出來。python3-csv-read.py 1 2 3 4 5 6 7 8 9 10 11 12 13 import csvpath = 'data.csv' try : f = open(path, 'r' ) rows = csv.reader(f, delimiter=',' ) for row in rows: print(row) except : print('ERROR: can not found ' + path) exit(1 )
data.csv 內容如下,data.csv 1 2 3 4 1,Tom,0.2, 2,Mary,0.5, 3,Mark,0.8, 4,Jason,1.1,
輸出如下,值得注意的是行尾有一個逗號會被當成空資料,1 2 3 4 ['1', 'Tom', '87.3', ''] ['2', 'Mary', '76.4', ''] ['3', 'Mark', '65.5', ''] ['4', 'Jason', '54.6', '']
使用 with open(…) as … 這是 Python 建議的另外一種讀取 csv 寫法,使用 with 語法, 先使用 open 再使用 csv.reader,輸出結果是一樣的。python3-csv-read2.py 1 2 3 4 5 6 7 8 9 import csvpath = 'data.csv' with open(path, newline='' ) as csvfile: rows = csv.reader(csvfile, delimiter=',' ) for row in rows: print(row)
data2.csv 內容如下,data2.csv 1 2 3 4 5 No,Name,Score 1,Tom,87.3 2,Mary,76.4 3,Mark,65.5 4,Jason,54.6
這裡next是將讀取指針移到下一行,回傳的資料為當前行數的資料, header為csv的第一行欄位名稱python3-csv-read3.py 1 2 3 4 5 6 7 8 9 10 11 import csvpath = 'data2.csv' with open(path, newline='' ) as csvfile: rows = csv.reader(csvfile, delimiter=',' ) headers = next(rows) print('headers: %s' % headers) for row in rows: print(row)
輸出如下,值得注意的是行尾沒有逗號就沒有空資料,1 2 3 4 5 headers: ['No', 'Name', 'Score'] ['1', 'Tom', '87.3'] ['2', 'Mary', '76.4'] ['3', 'Mark', '65.5'] ['4', 'Jason', '54.6']
將讀取的欄位轉換變數類型存到串列 list 裡 這邊示範將讀出來的每個欄位轉換成適當的變數類型,例如轉整數用 int()
、轉浮點數用 float()
,最後 append 到串列 list 裡,以便後續處理,python3-csv-read4.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import csvid = [] name = [] score = [] path = 'data2.csv' with open(path, newline='' ) as csvfile: rows = csv.reader(csvfile, delimiter=',' ) headers = next(rows) for row in rows: id.append(int(row[0 ])) name.append(row[1 ]) score.append(float(row[2 ])) print(id) print(name) print(score)
輸出如下,1 2 3 [1, 2, 3, 4] ['Tom', 'Mary', 'Mark', 'Jason'] [87.3, 76.4, 65.5, 54.6]
將讀取的 csv 內容轉成 NumPy array 以下範例是將讀取到 csv 內容轉成 NumPy array,python3-csv-read5.py 1 2 3 4 5 6 7 8 9 10 import csvimport numpy as nppath = 'data.csv' with open(path, newline='' ) as csvfile: rows = csv.reader(csvfile, delimiter=',' ) data = np.asarray(list(rows)) print(data)
輸出:1 2 3 4 [['1' 'Tom' '87.3' ''] ['2' 'Mary' '76.4' ''] ['3' 'Mark' '65.5' ''] ['4' 'Jason' '54.6' '']]
使用 NumPy 的 genfromtxt 來讀取 csv 以下範例是使用 NumPy 的 genfromtxt 來讀取 csvpython3-csv-read6.py 1 2 3 4 5 6 7 8 9 10 11 12 import csvimport numpy as nppath = 'data.csv' data = np.genfromtxt(path, delimiter=',' ) print(data) print(data[0 ]) print(data[1 ]) print(data[0 ][0 ]) print(data[1 ][0 ])
輸出如下所示,字串的部份變成nan之後有空再看看為什麼,1 2 3 4 5 6 7 8 [[ 1. nan 87.3 nan] [ 2. nan 76.4 nan] [ 3. nan 65.5 nan] [ 4. nan 54.6 nan]] [ 1. nan 87.3 nan] [ 2. nan 76.4 nan] 1.0 2.0
根據這篇 網友提到使用 NumPy 提供的讀取csv方法來讀取會比內建csv所花飛的時間多,所以這邊是建議可以使用內建csv提供的方法。
以上就是 Python 讀取 csv 檔案的介紹, 如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚 支持一下!
其它參考 csv — CSV File Reading and Writing — Python 3 documentationhttps://docs.python.org/3/library/csv.html#csv.reader Working with csv files in Python - GeeksforGeekshttps://www.geeksforgeeks.org/working-csv-files-python/
相關主題 Python 寫入 csv 檔案 Python 讀檔,讀取 txt 文字檔 Python 讀寫檔案 Python 使用 numpy 讀取 csv 資料再畫圖