用Python遍历文件夹下的所有文件并进行数据处理(Pathlib简介)

2023-12-24 17:08

本文主要是介绍用Python遍历文件夹下的所有文件并进行数据处理(Pathlib简介),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在数据分析的日常工作中,我们可能会经常需要处理这样的问题:将一个或多个文件夹下的文件中的数据进行分析、处理、整合。这些文件通常是相似的或是同类别的,比如我们有多个月份的销售信息,每个月份的数据分别存在一个excel文档中;多个类别的销售信息,每个类的数据分别存在一个excel文档中等等。像是如图中所示:

在当前文件夹中存在“files”文件夹,里面是我们将要分析的数据,在该文件夹目录下又有如下四个文件夹,我们可以看作是四个大类的数据:

这四个文件夹当中就分别存放着所对应的数据,随便打开其中一个文件夹,数据文件如图所示:

 其中每个文件的内容大致是相同:

所有文件共有128个,每个文件中条目数在几百行,我们需要分别对这些文件中的数据进行分析,求出每个文件中所属类目起始日期、终止日期、平均转化率、平均客单价,然后汇总到一起输出一份数据分析报告。如果用excel来一个个处理的话需要处理128次,想想就觉得费力啊!那么这个时候用上我们的pandas就再合适不过了。这个时候有些朋友会有些疑惑,我们该如何遍历这些文件并读取数据呢?本文就通过os库以及pathlib库为大家讲解,并在最后重点介绍一下pathlib。

首先导入我们需要使用到的库:

import pandas as pd
import numpy as np
import os
from pathlib import Path
import time

设置自己存放文件的根目录:

file_path = "/Users/***/jupyter_notebook/Python_file_processing/files"

先用os的方法,这里我们使用os.walk()来遍历文件名:

可以看到每次遍历都包含当前文件夹的根路径该文件夹下的文件夹该文件夹下的所有文件列表。通过代码我们可以轻松地将所有文件名整理到一个列表中:

# 存放所有文件名
file_list = []
# 存放每个子文件夹下所对应的文件名
file_dict = {}
for iroot, idirs, ifiles in os.walk(file_path):if not idirs:ifiles.remove('.DS_Store')file_list.extend(ifiles)file_dict[iroot] = ifiles

因为pandas读取文件需要绝对路径,所以我们建立一个根路径与文件名对应的字典,之后拼凑成绝对路径。file_dict如下图所示:

这样我们就可以通过dict.items()来拼接文件的绝对路径了,然后遍历读取文件,分析我们所需要的指标:

start_time = []
end_time = []
conversion_mean = []
category = []
unit_price_mean = []start = time.time()
# 遍历所有文件,拼接路径
for k, v in file_dict.items():for i in v:file_name = os.path.join(k, i)file = pd.read_excel(file_name)start_time.append(file['日期'].min())end_time.append(file['日期'].max())conversion_mean.append(file['转化率'].mean())category.append(file['三级类目'].unique()[0])# 文件中有inf值unit_price_mean.append(file['客单价'].replace(np.inf, np.nan).dropna().mean())output_file = pd.DataFrame({'起始日期': start_time,'终止日期': end_time,'平均转换率': conversion_mean,'所属类目': category,'平均客单价': unit_price_mean})
cost = round(time.time() - start, 2)
print(f'处理数据共用时{cost}秒')

最后输出分析报告,共128个条目:

接下来我们用pathlib来遍历文件,可能比os要方便一些。

首先设置文件目录:

p = Path(file_path)

让我们看一下通过pathlib的方法是如何遍历的:

# 所有以xlsx结尾的文件
for file in p.rglob('*.xlsx'):print(file)

可以看到,通过pathlib.Path.rglob()方法可以直接遍历汇总所有文件的绝对路径,直接用pandas读取即可:

start_time = []
end_time = []
conversion_mean = []
category = []
unit_price_mean = []start = time.time()
# 直接遍历出文件绝对路径
for file_name in p.rglob('*.xlsx'):file = pd.read_excel(file_name)start_time.append(file['日期'].min())end_time.append(file['日期'].max())conversion_mean.append(file['转化率'].mean())category.append(file['三级类目'].unique()[0])unit_price_mean.append(file['客单价'].replace(np.inf, np.nan).dropna().mean())output_file1 = pd.DataFrame({'起始日期': start_time,'终止日期': end_time,'平均转换率': conversion_mean,'所属类目': category,'平均客单价': unit_price_mean})
cost = round(time.time() - start, 2)
print(f'处理数据共用时{cost}秒')

这样,通过pandas的方法我们一下子就处理完了所有数据,只用时2秒,和手动用excel一个个处理相比太方便了,而pathlib库的使用更加方便了我们代码的编写。

 

Pathlib简介:

得到当前目录:

p = Path.cwd()

拼接路径,得到想要的文件的绝对路径:

p_new = p.joinpath('files', 'files32_1', '户外服装&潜水服.xlsx')

得到路径文件:

p_new.name

得到路径文件的名称:

p_new.stem

得到路径文件的后缀:

p_new.suffix

得到路径文件的上一级目录:

p_new.parent

得到路径的每一级:

p_new.parts

判断路径文件是否存在:

p_new.exists()

判断路径文件是否为文件夹:

p_new.is_dir()

判断路径文件是否为文件:

p_new.is_file()

创建新文件夹:

p_dir = Path(Path.cwd().joinpath('created_dir'))
# parents参数:
# True--若p_dir不存在则递归创建文件夹
# False--若p_dir不存在则报错
p_dir.mkdir(exist_ok=True, parents=True)

创建文件夹之前:

创建文件夹之后: 

 

修改路径文件的文件后缀(with_shuffix修改后缀,with_name修改文件名):

# 将原来的xlsx换为txt
p_new.replace(p_new.with_suffix('.txt'))

删除路径文件:

p_new.unlink()

 

 

 


感谢观看!

 

 

 

 

 

这篇关于用Python遍历文件夹下的所有文件并进行数据处理(Pathlib简介)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/532486

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下