python实现根据目标字符串修改一下行
需求:
根据source和dest两个文件,找出新增的命令行,然后在xml文件中根据命令修改id
输入souce:
ADD 100
SUB 200
输入dest:
MUL 300
DIV 400
ADD 100
输入macro:
<tar>MUL</tar>
<id>0</id>
......
<tar>DIV</tar>
<id>0</id>
输出:
<tar>MUL</tar>
<id>300</id>
......
<tar>DIV</tar>
<id>400</id>
实现代码:
#! /usr/bin/env python
# encoding:utf-8
import re
from bs4 import BeautifulSoup def chen():
file1 = 'D:\py\yeah\source.txt'
file2 = 'D:\py\yeah\dest.txt'
file3 = 'D:\py\yeah\macro.xml'
source = []
dest = []
with open(file1, 'r') as f_s:
for line in f_s:
source.append(line.strip())
with open(file2, 'r') as f_d:
for line in f_d:
dest.append(line.strip()) result = [item for item in dest if item not in source] # 获取新增的命令
print(result)
'''
f_xml = open(file3,'r+',encoding ='utf-8')
soup = BeautifulSoup(f_xml,'xml')
for item in soup.find_all('tar'): #找到tar的节点
next_sibling = item.find_next_sibling() #由于<tar></tar>和<id></id>是兄弟节点,可以通过查找下一个兄弟节点找到<MacroId>
print(next_sibling.string) #修改<id></id>的内容
next_sibling.string = '0'
'''
dic ={}
for res in result:
dic[re.sub('\d+','',res).strip()] = re.sub('\D+','',res).strip()
data = []
with open(file3, 'r', encoding="utf-8") as f3_r:
lines = f3_r.readlines()
lineIdx = 0
while lineIdx < len(lines):
if re.search('tar', lines[lineIdx]): # 查找到<CmdName>
data.append(lines[lineIdx])
tarstr = re.findall(r"<tar>(.+?)</tar>",lines[lineIdx])
lineIdx += 1 # 索引到下一行
if tarstr[0] in dic.keys():
lines[lineIdx] = re.sub("\d+", dic[tarstr[0]], lines[lineIdx]) # 将ID替换为目标ID值
data.append(lines[lineIdx])
else:
data.append(lines[lineIdx])
lineIdx += 1
with open(file3, 'w', encoding="utf-8") as f3_w: # 写回原文件
for item in data:
f3_w.write(item) if __name__ == '__main__':
chen()
python实现根据目标字符串修改一下行的更多相关文章
- 『Python基础-4』字符串
# 『Python基础-4』字符串 目录 1.什么是字符串 2.修改字符串 2.1 修改字符串大小 2.2 合并(拼接)字符串 2.3 使用乘号'*'来实现字符串的叠加效果. 2.4 在字符串中添加空 ...
- Python基础数据类型之字符串
Python基础数据类型之字符串 一.Python如何创建字符串 在python中用引号将一些文本包起来就构成了字符串(引号可以是单引号.双引号.单三引号,双三引号,它们是完全相同的) >> ...
- Python ORM Storm 源码修改
安装 storm : pip install storm 目标:修改 Storm 源代码以支持自动重连文件:python安装目录/site-packages/storm/database.py 在41 ...
- python的paramiko源码修改了一下,写了个操作命令的日志审计 bug修改
python的paramiko源码修改了一下,写了个操作命令的日志审计,但是记录的日志中也将backspace删除键记录成^H这个了,于是改了一下代码,用字符串的特性. 字符串具有列表的特性 > ...
- python(5)字符串处理 (sub,replace,find,index,upper,strip,split,sub翻页
一,sub和replace的用法 re.sub 函数进行以正则表达式为基础的替换工作 re.sub替换到目标字符串中的a,b或者c,并全部替换 另加上sub翻页操作: re.sub('start=\d ...
- python自学笔记(二)python基本数据类型之字符串处理
一.数据类型的组成分3部分:身份.类型.值 身份:id方法来看它的唯一标识符,内存地址靠这个查看 类型:type方法查看 值:数据项 二.常用基本数据类型 int 整型 boolean 布尔型 str ...
- Python开发——数据类型【字符串】
字符串定义 字符串是一个有序的字符的集合,用于存储和表示基本的文本信息 在Python中加了引号的字符,都被认为是字符串! 单引号.双引号.多引号之间的区别? 答案:单双引号没有区别 多引号的作用? ...
- 第二百九十五节,python操作redis缓存-字符串类型
python操作redis缓存-字符串类型 首先要安装redis-py模块 python连接redis方式,有两种连接方式,一种是直接连接,一张是通过连接池连接 注意:以后我们都用的连接池方式连接,直 ...
- Python基础总结(字符串常用,数字类型转换,基本运算符与流程控制)
一.字符串常用操作 #Python strip() 方法用于移除字符串头尾指定的字符(默认为空格) name='*egon**' print(name.strip('*'))#移除 name 变量对应 ...
随机推荐
- Iptabels防火墙和SElinux
两者的区别: iptables用于设置防火墙(firewall), 即管理内外通信. iptables是Linux下功能强大的应用层防火墙工具iptables 能做到“控制内部机器上网与不上网,访问哪 ...
- UE4如何检测目标在锥形视野内
转自:http://blog.csdn.net/l346242498/article/details/70237083 做UE4游戏AI方面经常会遇到一个问题,就是何如判定目标在AI单位的视野范围内, ...
- Postgresql 珍藏级文章
https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server 如何设置参数值 https://www.cnblogs.com/zhao ...
- JIT和AOT编译详解
JIT和AOT编译介绍 JIT - Just-In-Time 实时编译,即时编译 通常所说的JIT的优势是Profile-Based Optimization,也就是边跑边优化 ...
- Jquery的框架解析
最近闲的刁痛,想看看jQuery源码.但是这个源码看起来 还是挺费劲的.所以呢整理一份框架出来, 避免走入jQuery关键字的误区,我用Gys代替关键字jQuery. 下面是源码: (function ...
- celipse关联hadoop源码
可以在这里下载hadoop的源码包 https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/ 我自己下载的是hadoop2.6.0的源码包 ...
- CS229 6.15 Neurons Networks Deep Belief Networks
Hintion老爷子在06年的science上的论文里阐述了 RBMs 可以堆叠起来并且通过逐层贪婪的方式来训练,这种网络被称作Deep Belife Networks(DBN),DBN是一种可以学习 ...
- Can't create handler inside thread that has not called Looper.prepare()
Looper.prepare(); // Can't create handler inside thread that has not called Looper.prepare(). Toast. ...
- android:clipChildren属性,子布局超出父布局;
是否允许子View超出父View的范围,Boolean型true .false ,默认true不允许: android:clipChildren="true":如下 android ...
- 读取txt文件赋值到DataGridView中
先查看txt是每条信息之间是通过什么分割,我是通过换行符(\n)分割的, 然后再看每一条信息中字段是通过什么分割,我的字段是通过 tab键(\t)分割. 第一步 先获取到txt文件的路径: //获取绝 ...