Python工具開發實踐-csv2excel
- 2019 年 12 月 26 日
- 筆記
Python學習有一段時間了,今天來嘗試編寫一個程式來實現csv文件轉換為excel文件的功能。
首先分析需求,將需求分解為如下幾個步驟:
1、獲取文件名稱;
2、打開csv,可以使用pandas;
3、保存為excel,可以使用pandas
4、可以對程式處理時間進行計時,會用到time模組
對於第一個步驟,如果直接告訴程式文件的名稱的話,程式的可移植性太差了,不夠靈活,每次都要修改程式,不如升華一下,告訴程式一個目錄,程式自動獲取目錄下的所有csv文件,這樣就方便多了。
修改需求如下:
1、告知一個目錄,程式自動獲取目錄下所有的csv文件名稱,會用到os模組;
2、打開csv,可以使用pandas;
3、保存為excel,可以使用pandas
4、可以對程式處理時間進行計時,會用到time模組
每一個小功能可以編寫成一個函數,然後在主函數main里調用。
第一個函數:
def get_allfile(): """ 獲取文件夾下所有csv文件 """ # 用戶交互介面,提示用戶輸出 path = input('Please input your file path: ') # 列出當前目錄下的所有文件,返回一個列表 files = os.listdir(path) # 初始化一個空列表,用來存儲csv文件列表 file_list = [] for f in files: # 遍歷文件列表中的文件,判斷是否為csv文件 if os.path.splitext(f)[1] == '.csv': # 如果是,則將文件的絕對目錄放到csv文件列表中,否則跳過 file_list.append(path + '\' + f) else: pass # 返回csv文件列表 return file_list
第二個和第三個功能都用pandas,可以放到一個函數:
def csv2excel(f): """ 打開csv,另存為excel文件 """ # 打開csv df = pd.DataFrame(pd.read_csv(f, header=0, encoding='gbk')) # 另存為excel,文件絕對目錄+csv文件名稱+後綴.xlsx,去掉索引列 df.to_excel(os.path.splitext(os.path.dirname(f) + '\' + os.path.basename(f))[0] + '.xlsx', index=None)
用time模組計時比較簡單,放到主函數main()就好了
def main(): # 獲取文件列表 file_list = get_allfile() # 計時開始 start_time = time.time() # csv轉excel處理 for file in file_list: csv2excel(file) # 計時結束 end_time = time.time() # 計算程式處理耗時 cost_time = end_time - start_time # 用戶交互介面,輸出運行時間,並保留2為小數 print('程式運行時間:{}秒'.format(float('%.2f' % cost_time))) # 為防止程式運行完自動跳出,將頁面保留60秒 time.sleep(60)
至此,各個函數都寫好了,將各個函數放到一個py文件就可以了,記著首先要導入使用到的模組
import pandas as pdimport osimport time
另外,下面的最關鍵的兩行
if __name__ == '__main__': main()

