用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 logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

Python日期和时间完全指南与实战

《Python日期和时间完全指南与实战》在软件开发领域,‌日期时间处理‌是贯穿系统设计全生命周期的重要基础能力,本文将深入解析Python日期时间的‌七大核心模块‌,通过‌企业级代码案例‌揭示最佳实践... 目录一、背景与核心价值二、核心模块详解与实战2.1 datetime模块四剑客2.2 时区处理黄金法

Java进行日期解析与格式化的实现代码

《Java进行日期解析与格式化的实现代码》使用Java搭配ApacheCommonsLang3和Natty库,可以实现灵活高效的日期解析与格式化,本文将通过相关示例为大家讲讲具体的实践操作,需要的可以... 目录一、背景二、依赖介绍1. Apache Commons Lang32. Natty三、核心实现代

Python文件操作与IO流的使用方式

《Python文件操作与IO流的使用方式》:本文主要介绍Python文件操作与IO流的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python文件操作基础1. 打开文件2. 关闭文件二、文件读写操作1.www.chinasem.cn 读取文件2. 写

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee

rust 中的 EBNF简介举例

《rust中的EBNF简介举例》:本文主要介绍rust中的EBNF简介举例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 什么是 EBNF?2. 核心概念3. EBNF 语法符号详解4. 如何阅读 EBNF 规则5. 示例示例 1:简单的电子邮件地址

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模

Pandas进行周期与时间戳转换的方法

《Pandas进行周期与时间戳转换的方法》本教程将深入讲解如何在pandas中使用to_period()和to_timestamp()方法,完成时间戳与周期之间的转换,并结合实际应用场景展示这些方法的... 目录to_period() 时间戳转周期基本操作应用示例to_timestamp() 周期转时间戳基

Python将字库文件打包成可执行文件的常见方法

《Python将字库文件打包成可执行文件的常见方法》在Python打包时,如果你想将字库文件一起打包成一个可执行文件,有几种常见的方法,具体取决于你使用的打包工具,下面就跟随小编一起了解下具体的实现方... 目录使用 PyInstaller基本方法 - 使用 --add-data 参数使用 spec 文件(