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()