赞
踩
前几天收到一个excel拼接预处理的工作,一开始想着拼接能有多难,结果拿到源文件是真崩溃。一个大文件夹杂七杂八揣着若干个小文件夹,excel文件散落各处,而且各个excel文件sheet页的个数和名称也乱七八糟,没有任何规律可循。各个excel表格上充斥着各种人工痕迹,东一榔头西一棒子就是一个先前业务人员插的透视表。总之,是一个非常脏的数据集。
那就暴力遍历法,挨个读吧,先把数据读出来,后续清洗的问题也注定是灾难。
所以接下来的这段代码实现的效果是:读取一个包含子文件夹的大文件夹下的所有excel文件,并且读取excel的所有sheet页上的数据。
import pandas as pd import os dfs=pd.DataFrame() #os.walk(file_path) 深度遍历file_path下的所有子文件夹及文件 for root_dir,sub_dir,files in os.walk(r"E:\202009\源数据"): for file in files: if file.endswith(".xlsx"): #构造绝对路径 file_name = os.path.join(root_dir, file) #读取sheet页 #pd.read_excel(file_path,sheet_name=None).keys()获取excel表格所有的sheet页名称 for sheet in pd.read_excel(file_name,sheet_name=None).keys(): df=pd.read_excel(file_name,sheet_name=sheet) excel_name=file.replace(".xlsx","") #新增两列用于记录数据所属excel及sheet页,这一步骤感觉很有用,因为后续数据清理的时候,遇到莫名其妙的数据不知道怎么办的话,还可以去源excel表格上看下。 df["excel_name"]=excel_name df["sheet_name"]=sheet dfs=pd.concat([dfs,df])
语法:os.walk(top)
,top为需要遍历的目录地址,返回一个三元组(root,dirs,files)。
1)root 所指的是当前正在遍历的这个文件夹的本身的地址
2)dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
3)files 同样是 list , 内容是该文件夹中所有的文件名称(不包括子目录)
其中我们实际运用中最常用到的返回值是files.
#打印出一个目录下所有的末级文件名称
for root,dirs,files in os.walk(r"C:\Users\Desktop\2020.9-12"):
print(files)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。