循环目录文件处理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))
版权声明:本文为ministep原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。