python入门项目06:批量处理文件

news2025/1/31 3:06:24

文章目录

  • 前言
  • 一、理论知识
    • 1.1 OS模块
    • 1.2 XML的解析
  • 二、使用步骤
    • 1.引入库
    • 2.创建新文件夹
    • 3文件操作
    • 4 修改文件
  • 总结


前言

本文要完成的是对于较多XML文档的自动修改,这部分往往在大量的图像标注的修改中会使用到,同时也不要局限于本文中所提到的使用场景。


一、理论知识

python中有大量的第三方库可以供我们使用,因此我们需要对所用到的库进行简单的学习,有大致印象即可,等到需要某个功能上网查一下就行了。
在python编程时,经常和文件、目录打交道,所以离不了os模块

1.1 OS模块

此部分网上有大量的教程,在此不再赘述。可以参考此文章:OS模块的学习
在这里插入图片描述

1.2 XML的解析

xml.etree.ElementTree模块实现了一个简单而高效的API用于解析和创建XML数据。 参考文章:XML

二、使用步骤

1.引入库

代码如下(示例):

import xml.etree.ElementTree as ET
import os

2.创建新文件夹

代码如下(示例):

xmldir = 'xml'
newxmldir = 'newxml'

if not os.path.exists(newxmldir): #如果没有存放新xml的文件,那么
#就创建一个.
    os.makedirs(newxmldir)

3文件操作

for xml in os.listdir(xmldir):
    xmlpath = os.path.join(xmldir, xml)
    newxmlpath = os.path.join(newxmldir, xml)
    print("****************************")
    print("原始路径:   ",xmlpath)
    print("新文件的路径:", xmlpath)

上面代码实现的功能是遍历每一个文件,并找到原来的路径和存放新文件的路径。
在这里插入图片描述
得到这一步,下面要在上述的循环中进行修改操作

4 修改文件

tree = ET.parse(xmlpath)
    root = tree.getroot()  #root 有tag和attrib两个属性
    #print(root.tag,root.attrib)
    #for child in root:
       # print(child.tag, child.attrib)  查看树子支的标签
    for obj in root.findall('country'):
        name = obj.find('rank')
        if name.text == '1':
            name.text = '修改1'
        elif name.text == '4':
            name.text = '修改4'
    tree.write(newxmlpath, 'UTF-8')

在这里插入图片描述
上图是我们要修改的xml文档,假设一开始的文档中都是这种格式的数据。
观察可以发现其中的三个大框都是country,在这个节点的下面有rank,year,gdppc等子节点,所以假设我们要修改的为rank
修改结果如下:
在这里插入图片描述
具体的操作结合代码观看,一一对应的修改,不要盲目的找一个就用,因为数据格式还是多少有点区别的。

总结

本文实现的功能是批量化修改已有的xml文件。这种自动化的处理正是python的优雅之处,可以帮我们解决很多机械化的操作。
下面是全文的代码:(仅供参考)

#-*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import os

xmldir = 'xml'
newxmldir = 'newxml'

if not os.path.exists(newxmldir): #如果没有存放新xml的文件,那么就创建一个.
    os.makedirs(newxmldir)

for xml in os.listdir(xmldir):
    xmlpath = os.path.join(xmldir, xml)
    newxmlpath = os.path.join(newxmldir, xml)
    print("****************************")
    print("原始路径:   ",xmlpath)
    print("新文件的路径:", xmlpath)
    tree = ET.parse(xmlpath)
    root = tree.getroot()  #root 有tag和attrib两个属性
    #print(root.tag,root.attrib)
    #for child in root:
       # print(child.tag, child.attrib)  查看树子支的标签
    for obj in root.findall('country'):
        name = obj.find('rank')
        if name.text == '1':
            name.text = '修改1'
        elif name.text == '4':
            name.text = '修改4'
    tree.write(newxmlpath, 'UTF-8')
    print(xmlpath + ' 已修改')

其中一部分print是用作测试功能的,可以省略的,只是为了更好的理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springbboot随笔

无效的源发行版问题 改springboot版本 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:…

高校竞赛信息管理系统

摘要随着当今社会的发展&#xff0c;时代的进步&#xff0c;各行各业也在发生着变化&#xff0c;比如高校竞赛信息管理这一方面&#xff0c;利用网络已经逐步进入人们的生活。传统的高校竞赛信息管理&#xff0c;都是学生去学校查看竞赛信息然后再进行报名&#xff0c;这种传统…

linux面试高级篇

题目目录1.虚拟机常用有几种网络模式&#xff1f;请简述其工作原理或你个人的理解&#xff1f;2. Dockerfile中最常见的指令是什么&#xff1f;3.docker网络模式有哪些&#xff1f;4.Kubernetes有哪些核心组件这些组件负责什么工作&#xff1f;5. Pod是什么&#xff1f;6.描述一…

H264编码原理

1.什么是音视频&#xff1f; 比如我们下载的mp4格式&#xff08;还有rmvb、avi&#xff09;的电影 2.什么是h264&#xff1f; 对摄像头采集的每一帧视频需要进行编码&#xff0c;由于视频中存在空间和时间的冗余&#xff0c; 需要用算法来去除这些冗余。H264是专门去除这些冗…

SQL基础语句小结

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; 目录 一、SQL概述 1.简介 2.格式语法 3.SQL分类 二、DDL操作数据库 1.创建数据库 2.查询与使用 3.删除数据库 三、DDL:操作表 (1)数据类型 (2)创建表 (3)查询当前数据库的表 (4)删除表 (5)修改表 四、DML…

小鹏汽车「错失」智能化好牌

本周&#xff0c;作为小鹏品牌销售主力的P7正式迎来改款发布。3月6日&#xff0c;小鹏P7i迎来首发&#xff0c;作为P7的改款车型&#xff0c;在整车电子架构、三电系统、智能化硬件配置上都进行了全面升级。 基于和G9相同的双Orin-X计算平台两个盲区激光雷达&#xff0c;P7i实现…

RocketMQ基础篇(一)

目录一、发送消息类型1、同步消息2、异步消息3、单向消息4、顺序消费5、延迟消费二、消费模式1、集群模式2、广播模式3、消费模式扩展4、如何配置三、其他用法1、事务消息2、过滤消息1&#xff09;Tag过滤2&#xff09;SQL方式过滤源码放到了GitHub仓库上&#xff0c;地址 http…

HyperLPR3车牌识别-Android-SDK光速部署与使用

简介HyperLPR在2023年初已经更新到了v3的版本&#xff0c;该版本与先前的版本一样都是用于识别中文车牌的开源图像算法项目&#xff0c;最新的版本的源码可从github中提取&#xff1a;https://github.com/szad670401/HyperLPRHyperLPR-Android-SDK for JitPackHyperLPR3的官方源…

Prim算法和Kruskal算法到底哪个好?

Prim和Kruskal有啥区别&#xff1f;到底哪个好&#xff1f; 今天做了一道最小生成树的题&#xff0c;发现了一点猫腻&#xff01; 题目在这里 &#xff1a; 《修路问题1》 文章目录Prim和Kruskal有啥区别&#xff1f;到底哪个好&#xff1f;先说结论PrimKruskal修路问题1——…

不好!有敌情,遭到XSS攻击【网络安全篇】

XSS&#xff1a;当一个目标的站点&#xff0c;被我们用户去访问&#xff0c;在渲染HTMl的过程中&#xff0c;出现了没有预期到的脚本指令&#xff0c;然后就会执行攻击者用各种方法注入并执行的恶意脚本&#xff0c;这个时候就会产生XSS。 涉及方&#xff1a; 用户&#xff0…

Linux端安装MySQL并实现远程连接Navicat

文章目录Linux端安装MySQL&#xff08;centos版本&#xff09;Linux端安装MySQL&#xff08;centos版本&#xff09; 1、先将MySQL需要的四个rpm安装包上传上去&#xff0c;这里可以使用Xftp软件或者是通过window端使用ftp文件传输方式上传到Linux端&#xff0c;这里选择Xftp来…

基于JavaWeb学生选课系统开发与设计(附源码资料)

文章目录1. 适用人群2. 你将收获3.项目简介4.技术实现5.运行部分截图5.1.管理员模块5.2.教师模块5.3.学生模块1. 适用人群 本课程主要是针对计算机专业相关正在做毕业设计或者是需要实战项目的Java开发学习者。 2. 你将收获 提供&#xff1a;项目源码、项目文档、数据库脚本…

远程办公18年,把一个开源工具变成了价值 75亿美元的跨国企业

把自己的兴趣做成了一份事业&#xff0c;把一个开源工具发展成为一家价值75亿美元的跨国企业&#xff0c;而且还是那种员工做梦都想进入的公司&#xff0c;真正实现了功成名就&#xff0c;这或许是所有程序员的梦想吧。 先来看看这家公司的福利&#xff1a; 员工拥有没有限制的…

git快速入门(1)

1 git的下载与安装1&#xff09;下载git安装包下载路径&#xff1a;https://git-scm.com/我的操作系统是window&#xff0c;64位的&#xff0c;我下载的Git-2.33.0-64-bit.exe&#xff0c;从官网下载或者从网址下载链接&#xff1a;链接地址&#xff1a;https://pan.baidu.com/…

【MySQL】P8 多表查询(2) - 连接查询 联合查询

连接查询以及联合查询多表查询概述连接查询内连接隐式内连接显式内连接外连接左外连接右外连接自连接联合查询多表查询概述 建表语句见上一篇博文&#xff1a;https://blog.csdn.net/weixin_43098506/article/details/129402302 e.g.e.g.e.g. select * from emp, dept where e…

深入分析@Configuration源码

文章目录一、源码时序图1. 注册ConfigurationClassPostProcessor流程源码时序图2. 注册ConfigurationAnnotationConfig流程源码时序图3. 实例化流程源码时序图二、源码解析1. 注册ConfigurationClassPostProcessor流程源码解析&#xff08;1&#xff09;运行案例程序启动类Conf…

Python安装、断点调试

一、安装Python方法 1.1 在Microsoft Store微软商店中搜索Python安装&#xff08;推荐&#xff09; 或直接在cmd中Python运行 已经安装了就显示版本号&#xff0c; 如果没有安装过&#xff0c;会直接跳到微软商店 1.2 在python官网中找最新版下载安装 二、VSCODE中运行与断点…

容易混淆的嵌入式(Embedded)术语

因为做嵌入式开发工作虽然跳不出电子行业&#xff0c;但还是能接触到跨度较大的不同行当&#xff0c;身处不同的圈子。诸如医疗&#xff0c;银行&#xff0c;车载&#xff0c;工业&#xff1b;亦或者手机&#xff0c;PC&#xff0c;专用芯片&#xff1b;甚至可能横跨系统开发、…

Vue常见的事件修饰符

前言 vue一共给我们准备了6个事件修饰符&#xff0c;前三个比较常用&#xff0c;后三个少见&#xff0c;这里着重讲下前三个 1.prevent:阻止默认事件(常用) 2. stop:阻止事件冒泡(常用) 3. once:事件只触发一次(常用) 4.captrue:使用事件的捕捉模式(不常用) 5.self:只有event…

案例10---对生产环境的敬畏--生产环境

一&#xff1a;背景介绍 1&#xff1a;上午9:23&#xff0c;老师没有进行上课&#xff0c;但是却又很多的在线人员&#xff0c;并且在线人员的时间也不正确&#xff0c;用户反映问题。 2&#xff1a;开发人员发现用户上课情况异常。 3&#xff1a;10点整&#xff0c;询问项目…