基於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需要修改的內容
- 增加excel處理庫:from openpyxl.workbook import Workbook
- 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()