当前位置: 首页 > news >正文

Python 项目实践:文件批量处理

Python 项目实践:文件批量处理

文章目录

  • Python 项目实践:文件批量处理
      • 一 背景
      • 二 发现问题
      • 三 分析问题
      • 四 解决问题
        • 1 找到所有文件
        • 2 找到文件特定字段
        • 3 找出复杂的字符串
        • 4 替换目标字符串
        • 5 验证文件是否正确
      • 五 总结
      • 六 完整代码示例
      • 七 源码地址

本项目旨在通过 Python 编程实现对大量文件的批量处理。假设我们有 1000 个文件需要修改特定字段,例如将 yourpython.github.io 替换为 yourpython.com 。通过结合 Python 的文件管理、循环控制、正则表达式等知识,逐步解决问题。首先,通过 os.listdir() 遍历文件,利用正则表达式 re.findall() 找到需要替换的字段。然后,选择替换方案,将修改后的内容保存到新文件中,以保持原始文件不变。该项目展示了从发现问题、分析需求,到编写解决方案的完整过程,是实际应用 Python 知识的一个良好示例。

一 背景

让我们一起开展一个小项目,把之前学到的知识实际应用起来。根据自己的学习情况,预备课程可以选择跳过。

预备课

Python 文件与目录管理:操作、管理与检验详解
Python for 和 while 循环:掌握循环控制的基本操作
Python 文件读写操作详解:从创建到编码处理.md
Python 正则表达式详解:从基础匹配到高级应用

本章主要涉及功能

找到所有文件找到文件特定字段替换
os.listdir()re.findall()os.path.join()
os.path.join()os.path.join()re.sub()
string.startswith()

二 发现问题

假如要处理大量文件,比如 1000 个文件,需要替换其中的特定字符,比如把 yourpython.github.io 改成 yourpython.com。

三 分析问题

需求分析,要满足以下三点:

  • 遍历所有的文本文件
  • 找到文件中特定字段
  • 替换掉这些特定字段

四 解决问题

1 找到所有文件

这里需要 Python 文件与目录管理:操作、管理与检验详解 这章的知识点。

print(os.listdir("yourfiles"))
2 找到文件特定字段

这里需要 Python for 和 while 循环:掌握循环控制的基本操作 和 Python 文件读写操作详解:从创建到编码处理.md 这两章的知识点。

    for filename in os.listdir("yourfiles"):file_path = os.path.join("yourfiles", filename)with open(file_path, "r") as f:print(file_path, ": ", f.read())
3 找出复杂的字符串

这里需要 Python 正则表达式详解:从基础匹配到高级应用 这章的知识点。

    string = "这是我的主页 https://mofanpy.com, 这个 www.mofanpy.com 有很多 mofan 教你机器学习和 python 语言的教学"res = re.findall(r"(https://)?(mofanpy.com)", string)for r in res:print(r[1])
4 替换目标字符串

这里有二种方案:

  • 在原文本上替换,并覆盖原文本的内容。
  • 复制出一个新的文件,将原文本替换过的文字拷贝到新文件中,原文件不改变。

这里选择方案二。

    for filename in os.listdir("yourfiles"):file_path = os.path.join("yourfiles", filename)with open(file_path, "r") as f1:string = f1.read()new_string = re.sub(r"yourpython.github.io", "yourpython.com", string)with open(os.path.join("yourfiles", "new_" + filename), "w") as f2:f2.write(new_string)
5 验证文件是否正确
    for filename in os.listdir("yourfiles"):if filename.startswith("new_"):continuefile_path = os.path.join("yourfiles", "new_" + filename)with open(file_path, "r") as f:print(file_path, ": ", f.read())

五 总结

尽管这个任务看起来很简单,但其实包含了对项目的一些深度思考,比如如何发现问题、分析问题、解决问题。通过之前那个 简单的计算器项目 以及当前这个实践,大家对使用 Python 开发项目应该有了更深入的理解。好了,到了这个阶段,大家已经可以尝试独立完成一些简单的项目了。接下来的课程将致力于进一步提升你的技能,而且内容会更加丰富精彩。

六 完整代码示例

# This is a sample Python script.# Press ⌃R to execute it or replace it with your code.
# Press Double ⇧ to search everywhere for classes, files, tool windows, actions, and settings.
import os
import redef print_hi(name):# Use a breakpoint in the code line below to debug your script.print(f'Hi, {name}')  # Press ⌘F8 to toggle the breakpoint.# 项目实践 文件批量处理# 预备课:# 文件目录管理# for 和 while 循环# 读写文件# 正则表达式# 主要涉及功能# 找到所有文件# os.listdir()# os.path.join()# 找到文件特定字段# re.findall()# os.path.join()# 替换# os.path.join()# re.sub()# string.startswith()# 我遇到的问题 ,我们要处理大量文件 比如 1000 个文件,需要替换其中的特定字符,# 比如把 yourpython.github.io 改成 mofanpy.com# 分析问题# 遍历所有的文本文件# 找到文件中特定字段# 替换掉这个特定字段# 找到所有文件,文件目录管理print(os.listdir("yourfiles"))# 找到文件特定字段,for 和 while 循环,读写文件for filename in os.listdir("yourfiles"):file_path = os.path.join("yourfiles", filename)with open(file_path, "r") as f:print(file_path, ": ", f.read())# 找出复杂的字符串,正则表达式string = "这是我的主页 https://mofanpy.com, 这个 www.mofanpy.com 有很多 mofan 教你机器学习和 python 语言的教学"res = re.findall(r"(https://)?(mofanpy.com)", string)for r in res:print(r[1])# 替换,有二种方案# 在原文本上替换,并覆盖原文本的内容;# 复制出一个新的文件,将原文本替换过的文字拷贝到新文件中,原文件不改变。# 这里选择方案二for filename in os.listdir("yourfiles"):file_path = os.path.join("yourfiles", filename)with open(file_path, "r") as f1:string = f1.read()new_string = re.sub(r"yourpython.github.io", "yourpython.com", string)with open(os.path.join("yourfiles", "new_" + filename), "w") as f2:f2.write(new_string)# 查看文件是否正确print()for filename in os.listdir("yourfiles"):if filename.startswith("new_"):continuefile_path = os.path.join("yourfiles", "new_" + filename)with open(file_path, "r") as f:print(file_path, ": ", f.read())# Press the green button in the gutter to run the script.
if __name__ == '__main__':print_hi('文件批量处理')# See PyCharm help at https://www.jetbrains.com/help/pycharm/

复制粘贴并覆盖到你的 main.py 中运行,运行结果如下。

Hi, 文件批量处理
['c.txt', 'b.txt', 'a.txt', 'd.txt']
yourfiles/c.txt :  yourpython.github.io is my favorite site, please have a look.
yourfiles/b.txt :  this is a page in yourpython.github.io, please have a look.
yourfiles/a.txt :  I have an apple, I have a pen
yourfiles/d.txt :  what is my favorite site, please have a look of yourpython.github.io.
mofanpy.com
mofanpy.comyourfiles/new_c.txt :  yourpython.com is my favorite site, please have a look.
yourfiles/new_b.txt :  this is a page in yourpython.com, please have a look.
yourfiles/new_a.txt :  I have an apple, I have a pen
yourfiles/new_d.txt :  what is my favorite site, please have a look of yourpython.com.

七 源码地址

代码地址:

国内看 Gitee 之 文件批量处理.py

国外看 GitHub 之 文件批量处理.py

引用 莫烦 Python

相关文章:

Python 项目实践:文件批量处理

Python 项目实践:文件批量处理 文章目录 Python 项目实践:文件批量处理一 背景二 发现问题三 分析问题四 解决问题1 找到所有文件2 找到文件特定字段3 找出复杂的字符串4 替换目标字符串5 验证文件是否正确 五 总结六 完整代码示例七 源码地址 本项目旨在…...

jsonschema - 校验Json内容和格式

1、创建对象 from pydantic import BaseModel from typing import Listclass Person(BaseModel):name: strage: intclass Student(Person): level: int 16friends: List[Person] 2、生成 schema schema Student.model_json_schema()内容如下 {$defs: {Person: {propertie…...

浅谈计算机视觉新手的学习路径

浅谈计算机视觉新手的学习路径 计算机视觉是人工智能领域的一个重要分支,它的研究目标是使计算机能够理解和解释我们视觉可以看到的所有外界世界信息。对于一个计算机视觉领域的新人,学习计算机视觉大致可以分为几个步骤,包括理论基础、实际…...

SQL编程题复习(24/9/19)

练习题 x25 10-145 查询S001学生选修而S003学生未选修的课程(MSSQL)10-146 检索出 sc表中至少选修了’C001’与’C002’课程的学生学号10-147 查询平均分高于60分的课程(MSSQL)10-148 检索C002号课程的成绩最高的二人学号&#xf…...

提前解锁 Vue 3.5 的新特性

Vue 3.5 是 Vue.js 新发布的版本,虽然没有引入重大变更,但带来了许多实用的增强功能、内部优化和性能改进。 1. 响应式系统优化 Vue 3.5 进一步优化了响应式系统的性能,并且减少内存占用。尤其在处理大型或深度嵌套的响应式数组时&#xff…...

web基础—dvwa靶场(十)XSS

XSS(DOM) 跨站点脚本(XSS)攻击是一种注入攻击,恶意脚本会被注入到可信的网站中。当攻击者使用 web 应用程序将恶意代码(通常以浏览器端脚本的形式)发送给其他最终用户时,就会发生 XSS 攻击。允许这些攻击成…...

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(五)-聚合

聚合 聚合基于Query结果的统计,执行过程是搜索的一部分,Onesearch支持0代码构建聚合,聚合目前完全在引擎层 0代码聚合 上图是聚合的配置,包括2个pdm文档聚合统计 termsOfExt term桶聚合,统计ext,如&…...

Pandas中df常用方法介绍

目录 常用方法df.columnsdf.indexdf.valuesdf.Tdf.sort_index()df.sort_values() 案例 常用方法 df.columns df.columns 是 Pandas 中 DataFrame 对象的一个属性,用于获取 DataFrame 中的列标签(列名)。 基本语法如下: df.col…...

LabVIEW中AVI帧转图像数据

在LabVIEW中,有时需要将AVI视频文件的帧转换为图像数据进行进一步处理。下面详细讲解了如何从AVI视频提取单帧并将其转换为图像数据集群,以便与其他图像处理VI兼容。 问题背景: 用户已经拥有能够处理JPEG图像数据集群的VI,现在希…...

并发与并行的区别:深入理解Go语言中的核心概念

在编程中,并发与并行的区别往往被忽视或误解。很多开发者在谈论这两个概念时,常常把它们混为一谈,认为它们都指“多个任务同时运行”。但实际上,这种说法并不完全正确。如果我们深入探讨并发和并行的区别,会发现它不仅是词语上的不同,更是编程中非常重要的抽象层次,特别…...

小小扑克牌算法

1.定义一个扑克牌类Card: package democard; public class Card {public String suit;//表示花色public int rank;//表示牌点数Overridepublic String toString() {return "{"suit rank"}";}//实例方法,初始化牌的点数和花色public…...

【第34章】Spring Cloud之SkyWalking分布式日志

文章目录 前言一、准备1. 引入依赖 二、日志配置1. 打印追踪ID2. gRPC 导出 三、完整日志配置四、日志展示1. 前端2. 后端 总结 前言 前面已经完成了请求的链路追踪,这里我们通过SkyWalking来处理分布式日志; 场景描述:我们有三个服务消费者…...

easy-es动态索引支持

背景 很多项目目前都引入了es,由于es弥补了mysql存储及搜索查询的局限性,随着技术的不断迭代,原生的es客户端使用比较繁琐不直观,上手代价有点大,所以easy-es框架就面世了,学习成本很低,有空大…...

SWC(Speedy Web Compiler)

概述 SWC 由 Rust 编写, 既可用于编译,也可用于打包。 对于编译,它使用现代 JavaScript 功能获取 JavaScript / TypeScript 文件并输出所有主流浏览器支持的有效代码。 SWC在单线程上比 Babel 快 20 倍,在四核上快 70 倍。 简…...

【计算机网络】传输层协议UDP

目录 一、端口号1.1 端口号范围划分1.2 认识知名端口号 二、UDP协议2.1 UDP协议端格式2.2 UDP的特点2.3 UDP的缓冲区2.4 UDP使用注意事项2.5 基于UDP的应用层协议 一、端口号 传输层协议负责数据的传输,从发送端到接收端。端口号标识一个主机上进行通信的不同的应用…...

Docker+PyCharm远程调试环境隔离解决方案

DockerPyCharmMiniconda实现深度学习代码远程调试和环境隔离 本文详细介绍了如何在局域网环境下,利用Docker、PyCharm和Miniconda构建一个高效的深度学习远程调试平台。首先在服务器(server)上,通过Docker构建包含不同CUDA环境的镜…...

数字化转型的理论框架对比:从多维视角指导企业成功变革对比DPBOKIT4ITCOBITTOGAF

数字化转型的多维框架解析 在数字化时代,企业如何有效实现数字化转型已成为其生存和发展的关键问题。然而,市场上关于数字化管理的各种框架和理论并存,企业需要根据自身的需求选择最适合的指导路径。本文将通过对几个核心理论框架的对比&…...

【C++掌中宝】深入解析C++命名空间:有效管理代码的利器

文章目录 前言1. namespace 的价值2. namespace 的定义3. 命名空间的本质4. 嵌套的命名空间5. 命名空间的使用6. using 指令7. 补充结语 前言 假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外&am…...

2024/9/21 leetcode 21.合并两个有序链表 2.两数相加

目录 21.合并两个有序链表 题目描述 题目链接 解题思路与代码 2.两数相加 题目描述 题目链接 解题思路与代码 --------------------------------------------------------------------------- 21.合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返…...

Python学习的主要知识框架

Python的主要学习知识点非常广泛且深入,但我可以为您概括一些核心的学习领域,帮助您系统地掌握Python编程。以下是Python学习的主要知识框架: 1. Python基础语法 数据类型:整数、浮点数、字符串、布尔值、列表、元组、字典、集合…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

无法与IP建立连接,未能下载VSCode服务器

如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...