循环目录文件处理Excel相同表格,合并成一张长表

Posted ministep88

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环目录文件处理Excel相同表格,合并成一张长表相关的知识,希望对你有一定的参考价值。

循环目录文件处理Excel相同表格,合并成一张长表

# -*- coding: utf-8 -*-
"""
循环目录文件处理Excel相同表格,合并成一张长表
"""
import os,re
import pandas as pd
import time

def readExcelFile(fname,col_not_null,sheet_name,skiprows):
    """
    单个excel文件处理
    """
    table = pd.read_excel(fname,sheet_name,skiprows)    
    ##数据处理
    #去掉空格
    df = table
    df.columns = [i.replace(\' \',\'\')  for i in df.columns]
    # 删除字段
    df = df[df[col_not_null] != None]
    df = df[df[col_not_null].notnull()]
    return df


def handle_dir_excel(dir_path,col_not_null,sheet_name,skiprows):
    """
    目录处理
    """
    dir_path = "C:\\\\Users\\\\HP\\\\Desktop\\\\支付宝目录"
    df = pd.DataFrame([])
    for root,dirs,files in os.walk(dir_path):##文件夹的路径
        if files: ##判断是否有文件
            for file_name in files: ##循环文件的名称
                if \'.xls\' in file_name: #判定文件是否以xlsx结尾,是的就继续,不是的就退出了;
                    fname = os.path.join(root,file_name)
                    print(\'正在处理的文件是---%s\'%(fname))
                    try:
                        data = readExcelFile(fname,col_not_null,sheet_name,skiprows)
                        df_tmp = pd.DataFrame(data)
                        df = pd.concat([df,df_tmp], ignore_index=True, sort=True) ## 数据合并
                        print(\'文件的长宽是---\',df.shape)
                    except:
                        print(\'Fail---读取文件处理数据失败\')
                else:
                    print(\'warning:非.xls文件不读取处理\')
    return df

def write_xlsx(df,out_filename,out_cols):
    """
    将数据集保存到本地
    """
    print(\'保存的文件位置是---\',out_filename)
    try:
        writer = pd.ExcelWriter(out_filename, engine=\'xlsxwriter\')
        df.to_excel(writer,\'合集-Sheet1\',index=False)
    except:
        print(\'保存失败\')
    try:
        ##限定部分列输出
        df_v1 =df[out_cols]
        df_v1.to_excel(writer,\'部分列-Sheet2\',index=False)
    except:
        print(\'限定部分列输出失败\')
    writer.save()
    return None


if __name__ == "__main__":
    start_time = time.time() # 开始时间
    """
    基础配置信息
    """
    dir_path = "C:\\\\Users\\\\HP\\\\Desktop\\\\支付宝目录" #文件所在的目录
    ## 以下是针对单个excel文件设置的
    sheet_name = 0  #   sheet_name 设置为数字0,表示默认选择第一个sheet表格,如果是字符串,表示的是sheet_name的名字
    skiprows=4 #省略指定行数的数据
    col_not_null = \'交易创建时间\' ##选择一个字段,这个字段必须有值,用于剔除尾部数据 
    ## 输出信息
    out_filename =  \'合集v1.xlsx\' ##输出的文件名字
    out_filename = dir_path +\'\\\\\'+ out_filename
    out_cols =[\'交易创建时间\',\'金额(元)\',\'商品名称\',\'资金状态\'] ##输出限定部分列
    """
    目录excel读取处理
    """
    df = handle_dir_excel(dir_path,col_not_null,sheet_name,skiprows)
    """
    保存数据
    """
    write_xlsx(df,out_filename,out_cols)
    end_time = time.time() #结束时间
    print("程序耗时%f秒." % (end_time - start_time))

以上是关于循环目录文件处理Excel相同表格,合并成一张长表的主要内容,如果未能解决你的问题,请参考以下文章

多个相同表头的excel表格如何合并成一个

两个excel文件,表头相同,怎么合并成一个文件,求助高手啊

多个sheet合并成一个表

如何将EXCEL表格中的同一列有相同的内容 合并成一个单元格

DBGrid相同数据合并成一个格[最好用Delphi回答]

合并excel多个工作表