遍历读取代码

前几天收到一个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()文件目录遍历器

语法: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)
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐