Python處理CSV文件
Python處理CSV文件
前言
大綱
- 使用筆記本開啟 CSV檔案
- CSV 模組
- 讀取 CSV檔案
- 寫入 CSV檔案
- 範例專題 - 使用 CSV檔案製作氣象圖表 : exProject-CsvWeather.py
使用筆記本開啟CSV檔案
我們使用 2019聯合國世界人口統計 CSV 下載檔案為例,利用筆記本打開可以看到資料的結構,每一個資料用 "," 逗號隔開的一行一行的資料,第一行資料使每一列的表頭欄位,如下:
CSV 模組
讀取CSV檔案
使用 open() 方法開啟檔案
open() 語法格式如下:
with open(csv檔案名稱) as csvFile
當然,您也可以使用傳統方式開啟檔案
csvFile = open(csv檔案名稱)
建立 reader 物件
我們開啟了檔案物件 csvFile ,然後用 csv 模組的 reader() 方法建立 reader 物件,再使用 list() 方法,將 reader 物件轉換成 python 資料格式 串列: list ,我們就可以開始使用串列資料了。
範例 pythonCSV-01.py : 開啟CSV文件,csv模組建立 reader 物件,再使用 list() reader 物件轉換成 python 資料格式 串列: list。
# pythonCSV-01.py import csv fileName = 'population2019-UN.csv' with open(fileName) as csvFile: # 開啟csv檔案 csvReader = csv.reader(csvFile) # 讀檔案建立Reader物件 listPopulation = list(csvReader) # 將資料轉成串列 print(listPopulation) # 列印串列方法
利用迴圈 for-in 列出 reader 物件
範例 pythonCSV-02.py : 開啟CSV文件,csv模組建立 reader 物件,用迴圈 for-in 列出 reader 物件。
# pythonCSV-02.py import csv fileName = 'population2019-UN.csv' with open(fileName) as csvFile: # 開啟csv檔案 csvReader = csv.reader(csvFile) # 讀檔案建立Reader物件csvReader for row in csvReader: # 用迴圈列出csvReader物件內容 print("Row %s = " % csvReader.line_num, row)
利用迴圈 for-in 列出 串列list 內容
範例 pythonCSV-03.py : 利用迴圈 for-in 列出 串列list 內容。
# pythonCSV-03.py import csv fileName = 'population2019-UN.csv' with open(fileName) as csvFile: # 開啟csv檔案 csvReader = csv.reader(csvFile) # 讀檔案建立Reader物件csvReader listPopulation = list(csvReader) # 將資料轉成串列 for row in listPopulation: # 用迴圈列出串列內容 print(row)
利用串列索引,單獨讀取個別欄位內容
範例 pythonCSV-04.py : 利用串列索引,單獨讀取個別行、欄位內容。
# pythonCSV-04.py import csv fileName = 'population2019-UN.csv' with open(fileName) as csvFile: # 開啟csv檔案 csvReader = csv.reader(csvFile) # 讀檔案建立Reader物件csvReader listPopulation = list(csvReader) # 將資料轉成串列 print(listPopulation[0][1], listPopulation[0][4], listPopulation[0][8]) # 列出第1行第2欄位,第5欄位,第9欄位 print(listPopulation[1][1], listPopulation[1][4], listPopulation[1][8]) # 列出第2行第2欄位,第5欄位,第9欄位
DictReader()
範例 pythonCSV-05.py : 利用 DictReader() 方法,創建排序字典(OorderedDict),並印出 DictRewader 物件: csvDictReader 的特定的欄位內容。
# pythonCSV-05.py import csv fileName = 'population2019-UN.csv' with open(fileName) as csvFile: # 開啟csv檔案 csvDictReader = csv.DictReader(csvFile) # 讀檔案建立DictReader物件 for row in csvDictReader: print(row['Location'], row['Time'], row['PopTotal'])
寫入CSV檔案
開啟 open() 關閉 close() 要寫入的檔案
csvFile = open('檔案名稱', 'w', newline = '') # 開啟csv檔案,'w' 表示write only 唯寫,newline = '' 可避免在輸出時每一行之間會多空一行。
csvFile.close() #執行結束,關閉檔案。
當使用 with ....as 開啟檔案時,會自動關閉檔案,所以不需要在執行程式結束時關閉檔案。
with open('檔案名稱', 'w', newline = '') as csvFile: # 開啟csv檔案
建立writer物件
with open('檔案名稱', 'w', newline = '') as csvFile: csvWriter = csv.writer(csvFile) # 建立writer物件
或是
csvFile = open('檔案名稱', 'w', newline = '') csvWriter = csv.writer(csvFile) # 建立writer物件 ....... csvFile.close()
輸出串列 writerow()
範例 pythonCSV-07.py : 拷貝檔案 : 讀入一個檔案,並寫入另一個檔案。
# pythonCSV-07.py import csv inputFileName = 'output-pythonCSV-06.csv' # 來源檔案 outputFileName = 'output-pythonCSV-07.csv' # 目的檔案 with open(inputFileName) as csvReadFile: # 開啟csv檔案供讀取 csvReader = csv.reader(csvReadFile) # 讀檔案建立Reader物件 listReport = list(csvReader) # 將資料轉成串列 with open(outputFileName, 'w', newline = '') as csvWriteFile: # 開啟csv檔案供寫入 csvWriter = csv.writer(csvWriteFile) # 建立Writer物件 for row in listReport: # 將串列寫入 csvWriter.writerow(row)
參數 delimiter 分隔符號
CSV檔案預設欄位之間的分隔符號是 "," 逗號,可使用參數 delimiter 更改分隔符號。
範例 pythonCSV-08.py : 更改分隔符號為 定位點 \t。
# pythonCSV-08.py import csv fileName = 'output-pythonCSV-08.csv' with open(fileName, 'w', newline = '') as csvFile: # 開啟csv檔案 csvWriterObj = csv.writer(csvFile, delimiter='\t') # 建立Writer物件 csvWriterObj.writerow(['Name', 'Age', 'City']) csvWriterObj.writerow(['Hung', '35', 'Taipei']) csvWriterObj.writerow(['James', '40', 'Chicago'])
寫入字典資料 DictWriter()
其語法格式如下:
dictWriter = csv.DicWriter(csvFile, fieldnames=fields)
範例 pythonCSV-09.py : 使用 DictWriter() 將字典資料寫入 CSV 檔案
# pythonCSV-09.py import csv fileName = 'output-pythonCSV-09.csv' with open(fileName, 'w', newline = '') as csvFile: # 開啟csv檔案 fields = ['Name', 'Age', 'City'] dictWriterObj = csv.DictWriter(csvFile, fieldnames=fields) # 建立Writer物件 dictWriterObj.writeheader() # 寫入標題 dictWriterObj.writerow({'Name':'Hung', 'Age':'35', 'City':'Taipei'}) dictWriterObj.writerow({'Name':'James', 'Age':'40', 'City':'Chicago'})
範例 pythonCSV-10.py : 將串列資料寫入CSV檔,而此串列資料的元素是字典。
# pythonCSV-10.py import csv dictList = [{'Name':'Hung', 'Age':'35', 'City':'Taipei'}, # 定義串列,元素是字典 {'Name':'James', 'Age':'40', 'City':'Chicago'}] fileName = 'output-pythonCSV-10.csv' with open(fileName, 'w', newline = '') as csvFile: # 開啟csv檔案 fields = ['Name', 'Age', 'City'] dictWriter = csv.DictWriter(csvFile, fieldnames=fields) # 建立Writer物件 dictWriter.writeheader() # 寫入標題 for row in dictList: # 寫入內容 dictWriter.writerow(row)
參考資料
特色、摘要,Feature、Summary:
關鍵字、標籤,Keyword、Tag:
- CSV,Python,Programming-Language,Data-Model,Python-Tutorial,
留言
張貼留言
Aron阿龍,謝謝您的留言互動!