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