Python 讀取與寫入CSV 檔案教學與範例 - G. T. Wang
文章推薦指數: 80 %
這裡介紹如何在Python 中使用 csv 模組,讀取與寫入逗點分隔檔。
... import csv # 開啟輸出的CSV 檔案 with open('output.csv', 'w', newline='') as ...
Blogger舊站
關於
Facebook
Flickr
物聯網
網站架設
程式設計
統計
素食
特價優惠
宗教
物聯網
網站架設
程式設計
統計
素食
特價優惠
宗教
Python讀取與寫入CSV檔案教學與範例
2018/03/22
8則留言
這裡介紹如何在Python中使用csv模組,讀取與寫入逗點分隔檔。
逗點分隔(Comma-SeparatedValues,簡稱csv)是一種簡單的文字檔格式,以逗號分隔不同欄位的資料,很多軟體在儲存與交換表格資料時都支援這樣的格式。
在Python中若要讀取或產生csv的檔案,可以使用內建的csv模組,以下是使用方式以及範例程式碼。
讀取CSV檔案
假設我們有一個csv檔案iris.csv,其內容如下:
sepal_length,sepal_width,petal_length,petal_width,species
5.1,3.5,1.4,0.2,setosa
4.9,3,1.4,0.2,setosa
4.7,3.2,1.3,0.2,setosa
4.6,3.1,1.5,0.2,setosa
[略]
我們可以使用下面這段程式碼將這個csv檔的內容讀取出來:
importcsv
#開啟CSV檔案
withopen('iris.csv',newline='')ascsvfile:
#讀取CSV檔案內容
rows=csv.reader(csvfile)
#以迴圈輸出每一列
forrowinrows:
print(row)
我們使用csv.reader讀取出來的rows會是一個二維的list,裡面就是整張表格的資料,這裡我們把每一列的list直接輸出,執行後會像這樣:
['sepal_length','sepal_width','petal_length','petal_width','species']
['5.1','3.5','1.4','0.2','setosa']
['4.9','3','1.4','0.2','setosa']
['4.7','3.2','1.3','0.2','setosa']
['4.6','3.1','1.5','0.2','setosa']
[略]
這裡在開啟csv檔案時加上了newline=''參數,這是為了讓資料中包含的換行字元可以正確被解析,所以建議在讀取csv檔案時都固定加入這個參數。
指定分隔字元
如果資料欄位之間的分隔字元不是使用預設的逗號,而是其他字元的話,在讀取時就要自行指定欄位的分隔字元。
假設我們要讀取Linux的/etc/passwd這個檔案,資料如下:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
[略]
這個檔案內容的各個欄位是以冒號(:)來分隔的,我們可以使用以下這段程式碼來讀取:
importcsv
withopen('/etc/passwd',newline='')ascsvfile:
#以冒號分隔欄位,讀取檔案內容
rows=csv.reader(csvfile,delimiter=':')
forrowinrows:
print(row)
輸出如下:
['root','x','0','0','root','/root','/bin/bash']
['daemon','x','1','1','daemon','/usr/sbin','/usr/sbin/nologin']
['bin','x','2','2','bin','/bin','/usr/sbin/nologin']
['sys','x','3','3','sys','/dev','/usr/sbin/nologin']
['sync','x','4','65534','sync','/bin','/bin/sync']
[略]
讀取成Dictionary
我們也可以將csv檔案的內容讀取進來之後,轉為Python的dictionary格式,這樣在存取各定資料時會方便一些:
importcsv
withopen('iris.csv',newline='')ascsvfile:
#讀取CSV檔內容,將每一列轉成一個dictionary
rows=csv.DictReader(csvfile)
#以迴圈輸出指定欄位
forrowinrows:
print(row['sepal_length'],row['species'])
這個例子中我們使用以csv.DictReader來讀取CSV檔案的內容,它會自動把第一列(row)當作欄位的名稱,將第二列以後的每一列轉為dictionary,這樣我們就可以使用欄位的名稱來存取資料。
執行後的輸出會像這樣:
5.1setosa
4.9setosa
4.7setosa
4.6setosa
5setosa
寫入CSV檔案
如果我們在程式中產生了表格的資料,想要儲存為csv檔案,可以使用以下這段程式碼:
importcsv
#開啟輸出的CSV檔案
withopen('output.csv','w',newline='')ascsvfile:
#建立CSV檔寫入器
writer=csv.writer(csvfile)
#寫入一列資料
writer.writerow(['姓名','身高','體重'])
#寫入另外幾列資料
writer.writerow(['令狐沖',175,60])
writer.writerow(['岳靈珊',165,57])
產生的output.csv檔案內容會像這樣:
姓名,身高,體重
令狐沖,175,60
岳靈珊,165,57
指定分隔字元
輸出csv檔案時也可以自行指定欄位的分隔字元,例如:
importcsv
withopen('output.csv','w',newline='')ascsvfile:
#以空白分隔欄位,建立CSV檔寫入器
writer=csv.writer(csvfile,delimiter='')
writer.writerow(['姓名','身高','體重'])
writer.writerow(['令狐沖',175,60])
writer.writerow(['岳靈珊',165,57])
輸出的output.csv檔案內容會變成這樣:
姓名身高體重
令狐沖17560
岳靈珊16557
一次寫入二維表格
如果我們的資料是已經整理好的二維表格,也可以一次就把整張表格寫進csv檔案中:
importcsv
#二維表格
table=[
['姓名','身高','體重'],
['令狐沖',175,60],
['岳靈珊',165,57]
]
withopen('output.csv','w',newline='')ascsvfile:
writer=csv.writer(csvfile)
#寫入二維表格
writer.writerows(table)
這樣產生的csv檔案也會跟上面的例子相同。
寫入Dictionary
如果我們在Python中的資料格式是dictionary,也可以使用csv.DictWriter直接將dictionary寫入csv檔案中:
importcsv
withopen('output.csv','w',newline='')ascsvfile:
#定義欄位
fieldnames=['姓名','身高','體重']
#將dictionary寫入CSV檔
writer=csv.DictWriter(csvfile,fieldnames=fieldnames)
#寫入第一列的欄位名稱
writer.writeheader()
#寫入資料
writer.writerow({'姓名':'令狐沖','身高':175,'體重':60})
writer.writerow({'姓名':'岳靈珊','身高':165,'體重':57})
此範例輸出的檔案內容也跟上面的例子相同。
參考資料:Python2Document、Python3Document
程式設計
Python
G.T.Wang
個人使用Linux經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。
8留言
新增留言→
DT
請問一下,我將要載入的csv檔放置在跟python檔同一個資料夾下,但是卻出現FileNotFoundError的情況,要如何解決此問題呢?
File“C:\Users\user\Desktop\reyopython\csv_reader.py”,line3,in
withopen(‘result.csv’,newline=”)ascsvfile:
FileNotFoundError:[Errno2]Nosuchfileordirectory:‘result.csv’
2018/08/11
回覆
Passby
試試看”\result.csv”
或是放絕對路徑
“C:\Users\user\Desktop\reyopython\result.csv”
2018/09/07
回覆
Sam
請問我的程式要讀取的時候一直顯示
‘csv’hasnoattribute’reader’
要怎麼做
2020/09/22
回覆
Raines
嗨,我使用下面的code
不過一直出現
TypeError:‘_csv.reader’objectisnotcallable
請問一下是甚麼問題
importcsv
#開啟CSV檔案
withopen(‘d:/Users/ChenR/Desktop/HHP/1810C35.dat’,newline=”)ascsvfile:
#讀取CSV檔案內容
rows=csv.reader(csvfile)
#以迴圈輸出每一列
forrowinrows:
print(row)
2018/11/13
回覆
eric
importcsv
#開啟CSV檔案
withopen(‘d:\daDebug.ini’,newline=”)ascsvfile:
rows=csv.reader(csvfile)
#以迴圈輸出每一列
forrowinrows:
print(row)
2020/04/27
回覆
hint
python3newline=”
python2open(csv_file,‘wb’)
2020/09/02
回覆
Neal
請問如果我讀取CSV檔案後要轉成excel格式輸出,可以怎麼做呢?
2021/01/12
回覆
Wen
令狐沖太瘦了,岳靈珊也太胖了吧XD
2021/08/19
回覆
LeaveaReply取消回覆
留言*
Name*
Email*
Website
搜尋
分類Arduino(5)
BeagleBoneBlack(1)
DIY(54)
Linux(317)
macOS(33)
Octave(15)
Perl(12)
R(47)
Windows(98)
WordPress(16)
個人(15)
免費(35)
兒童(30)
實用工具(85)
手機(13)
技巧(45)
有趣(99)
樹莓派(57)
物聯網(55)
玄學(11)
生活(209)
程式設計(137)
統計學(8)
網頁空間(36)
網頁開發(128)
虛擬化(7)
農業(42)
遊戲(9)
開箱(132)
雲端(4)
宗教
如何戒邪淫、遠離婚外情
戒淫寶典:《壽康寶鑑》白話有聲書
公益
社團法人新竹縣愛心物資集發協會
igiving公益網
台灣世界展望會
Yahoo奇摩公益
家扶基金會
©2022G.T.Wang
延伸文章資訊
- 1csv — CSV File Reading and Writing — Python 3.10.7 ...
The csv module implements classes to read and write tabular data in CSV format. ... The Python En...
- 2Python 寫入csv 檔案 - ShengYu Talk
本篇介紹如何用python write csv 檔案,csv 檔案格式是常用格式,以下將示範如何用python 的內建csv 模組的csv.writer 來寫入csv 檔案。
- 3Python 讀取與寫入CSV 檔案教學與範例 - G. T. Wang
這裡介紹如何在Python 中使用 csv 模組,讀取與寫入逗點分隔檔。 ... import csv # 開啟輸出的CSV 檔案 with open('output.csv', 'w', ne...
- 4如何在Python 中把列表寫入CSV
可以使用Python 列表值來編寫csv 檔案。像csv.writer()、writerow()、pandas 和numpy 庫這樣的方法都是用於這個目的的。
- 5Reading and Writing CSV Files in Python - Real Python
Reading from a CSV file is done using the reader object. The CSV file is opened as a text file wi...