网站更新内容:请访问: https://bigdata.ministep.cn/

循环目录文件处理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))

posted @ 2021-05-27 00:49  ministep88  阅读(138)  评论(3编辑  收藏  举报
网站更新内容:请访问:https://bigdata.ministep.cn/