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