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

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