1. 程式人生 > >【Python程式設計快速上手】【實踐專案】Excel到CSV的轉換程式

【Python程式設計快速上手】【實踐專案】Excel到CSV的轉換程式

專案說明

  • 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文件時,效率十分的低下,往往需要幾分鐘甚至十幾分鍾,由於目前屬於初學者階段,對於記憶體管理機制等基礎知識涉獵較淺,不敢妄下結論,特此記錄,待後續學習後再回顧更新。