【Python程式設計快速上手】【實踐專案】Excel到CSV的轉換程式
阿新 • • 發佈:2019-02-02
專案說明
- Excel 可以將電子表格儲存為CSV 檔案,只要點幾下滑鼠,但如果有幾百個Excel檔案要轉換為CSV,就需要點選幾小時。利用第12 章的openpyxl 模組,程式設計讀取當前工作目錄中的所有Excel 檔案,並輸出為CSV 檔案。
- 一個 Excel 檔案可能包含多個工作表,必須為每個表建立一個CSV 檔案。CSV檔案的檔名應該是(Excel 檔名)_(表標題).csv,其中(Excel 檔名)是沒有副檔名的Excel 檔名(例如’spam_data’,而不是’spam_data.xlsx’),(表標題)是Worksheet 物件的title 變數中的字串。
程式碼塊
#! /usr/bin/env python3
# excelToCsv.py - 將Excel電子表格儲存為CSV格式
import openpyxl, csv, os
for fileName in os.listdir('.'): # 迴圈遍歷當前目錄資料夾
if not fileName.endswith('.xlsx'): # 如果不是Excel文件就跳過,繼續迴圈下一步
continue
print('Transforming ' + fileName + ' to CSV...') # 輸出顯示當前正在轉換的檔名
wb = openpyxl.load_workbook(fileName) # 讀二進位制方式開啟Excel文件
for sheetName in wb.sheetnames: # 迴圈遍歷當前文件中的工作表
sheet = wb[sheetName]
csvFile = open(fileName[:-5] + '_' + sheetName + '.csv', 'w', newline='') # 建立一個CSV的FILE物件,根據專案要求命名
csvWriter = csv.writer(csvFile) # 建立一個writer物件
for rowNum in range(1, sheet.max_row + 1): # 迴圈當前工作表中的每一行
rowData = []
for colNum in range(1, sheet.max_column + 1): # 迴圈當前行中的每一列,即每個單元格
rowData.append(sheet.cell(row=rowNum,column=colNum).value) # 將單元格值插入到列表中,形成包含Excel每行資料的列表
csvWriter.writerow(rowData) # 用writerow()方法將列表寫入CSV文件
print('Done!')
*注:
在執行上述程式碼塊時,發現了一個小問題,即處理KB級的Excel文件時,效率可接受,但是在處理MB級Excel文件時,效率十分的低下,往往需要幾分鐘甚至十幾分鍾,由於目前屬於初學者階段,對於記憶體管理機制等基礎知識涉獵較淺,不敢妄下結論,特此記錄,待後續學習後再回顧更新。