基於Python的Excel文件處理

簡介

本篇主要介紹基於python的Excel常規操作:文件讀取、數據統計、表格合併以及文件存儲等內容。

1. pandas讀取Excel文件函數:pd.read_excel()

def read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0,
               index_col=None, names=None, parse_cols=None, parse_dates=False,
               date_parser=None, na_values=None, thousands=None,
               convert_float=True, has_index_names=None, converters=None,
               dtype=None, true_values=None, false_values=None, engine=None,
               squeeze=False, **kwds):

常用參數:

  • io :excel 路徑;
  • sheetname:默認是sheetname爲0,返回多表使用sheetname=[0,1],若sheetname=None是返回全表 。注意:int/string返回的是dataframe,而none和list返回的是dict of dataframe。
  • header :指定作爲列名的行,默認0,即取第一行,數據爲列名行以下的數據;若數據不含列名,則設定 header = None;
  • skiprows:省略指定行數的數據
  • skip_footer:省略從尾部數的行數據
  • index_col :指定列爲索引列,也可以使用 u’string’
  • names:指定列的名字,傳入一個list數據

2. 合併多個表格函數:pd.concat()

讀取多個excel文件,將數據根據不同的軸作簡單的融合。

3. 寫入一個表格中的多個Sheet: pd.ExcelWriter()

將整理後的多個文件寫入同一個excel中,若直接用 df.to_excel()函數,則只會保留最後一個sheet的內容,因此官方給出pd.ExcelWriter()函數解決向同一個excel文件中寫入多個sheet的方法,程序如下所示:

with pd.ExcelWriter(path + '彙總.xlsx') as writer:
        df.to_excel(writer, sheet_name='合併', index=False)
        sta.to_excel(writer, sheet_name='彙總')

4. 代碼文件

# -*- coding: utf-8 -*-
# @Time : 2020/6/11 16:24
# @Author : ChenQ
# @FileName: ExcelProcess.py

import pandas as pd
import os

def Init(path, listName, resultName):
    #清理歷史文件
    try:
        os.remove(path + listName + '.txt')
        os.remove(path + resultName +'.xlsx')
    except:
        pass
    #獲取文件夾中的xlsx文件名稱,並保存到該文件夾下的 list.txt 
    os.system('dir '+ path + '\*.xlsx /b > ' + path + listName + '.txt')

def ProcessExcel(path = "E:\Project\\", listName="list", resultName="彙總"):
    '''
    :param path: Excel文件存放路徑,默認值:E:\Project\
    :param listName: 獲取Excel名稱後存放到 listName
    :param resultName: Excel處理結果存放到 resultName
    :return: 無
    '''
    Init(path, listName, resultName)
    print("初始化完成!")
    #讀取測試文件
    dfs = []
    #關鍵字段:name、casename、result、wrong_information、date、test_module
    keyword = ['name','casename','result','wrong_information','date','test_module']
    for fp in open(path+"list.txt","r"):
        fp = path+fp.replace('\n','')
        dfs.append(pd.read_excel(fp, sheetname=0, usecols=keyword)
    # 合併多個表格
    df = pd.concat(dfs)
    print("表格合併完畢!")
    # 統計result:filed與pass
    sta = df['result'].value_counts()
    #將表格合併數據 df 寫到“合併”;統計後的數據寫到“彙總”
    with pd.ExcelWriter(path + '彙總.xlsx') as writer:
        df.to_excel(writer, sheet_name='合併', index=False)
        sta.to_excel(writer, sheet_name='彙總')
    print("寫入文件完成!")

if __name__ == '__main__':
    #處理Excel表格
    ProcessExcel()

5. python 3.7版

5.1 python需要修改的內容

  1. 增加excel處理庫:from openpyxl.workbook import Workbook
  2. pd.read_excel()中:sheetname改爲sheet_name

5.2 python 3.7代碼文件

# -*- coding: utf-8 -*-
# @Time : 2020/6/11 16:24
# @Author : ChenQ
# @FileName: ExcelProcess.py

import os
import pandas as pd
from openpyxl.workbook import Workbook

def Init(path, listName, resultName):
    #清理歷史文件
    try:
        os.remove(path + listName + '.txt')
        os.remove(path + resultName +'.xlsx')
    except:
        pass
    #獲取文件夾中的xlsx文件名稱,並保存到該文件夾下的 list.txt 
    os.system('dir '+ path + '\*.xlsx /b > ' + path + listName + '.txt')

def ProcessExcel(path = "E:\Project\\", listName="list", resultName="彙總"):
    '''
    :param path: Excel文件存放路徑,默認值:E:\Project\
    :param listName: 獲取Excel名稱後存放到 listName
    :param resultName: Excel處理結果存放到 resultName
    :return: 無
    '''
    Init(path, listName, resultName)
    print("初始化完成!")
    #讀取測試文件
    dfs = []
    #關鍵字段:name、casename、result、wrong_information、date、test_module
    keyword = ['name','casename','result','wrong_information','date','test_module']
    for fp in open(path+"list.txt","r"):
        fp = path+fp.replace('\n','')
        dfs.append(pd.read_excel(fp, sheet_name=0, usecols=keyword)
    # 合併多個表格
    df = pd.concat(dfs)
    print("表格合併完畢!")
    # 統計result:filed與pass
    sta = df['result'].value_counts()
    #將表格合併數據 df 寫到“合併”;統計後的數據寫到“彙總”
    with pd.ExcelWriter(path + '彙總.xlsx') as writer:
        df.to_excel(writer, sheet_name='合併', index=False)
        sta.to_excel(writer, sheet_name='彙總')
    print("寫入文件完成!")

if __name__ == '__main__':
    #處理Excel表格
    ProcessExcel()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章