需求:

根据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实现根据目标字符串修改一下行的更多相关文章

  1. 『Python基础-4』字符串

    # 『Python基础-4』字符串 目录 1.什么是字符串 2.修改字符串 2.1 修改字符串大小 2.2 合并(拼接)字符串 2.3 使用乘号'*'来实现字符串的叠加效果. 2.4 在字符串中添加空 ...

  2. Python基础数据类型之字符串

    Python基础数据类型之字符串 一.Python如何创建字符串 在python中用引号将一些文本包起来就构成了字符串(引号可以是单引号.双引号.单三引号,双三引号,它们是完全相同的) >> ...

  3. Python ORM Storm 源码修改

    安装 storm : pip install storm 目标:修改 Storm 源代码以支持自动重连文件:python安装目录/site-packages/storm/database.py 在41 ...

  4. python的paramiko源码修改了一下,写了个操作命令的日志审计 bug修改

    python的paramiko源码修改了一下,写了个操作命令的日志审计,但是记录的日志中也将backspace删除键记录成^H这个了,于是改了一下代码,用字符串的特性. 字符串具有列表的特性 > ...

  5. python(5)字符串处理 (sub,replace,find,index,upper,strip,split,sub翻页

    一,sub和replace的用法 re.sub 函数进行以正则表达式为基础的替换工作 re.sub替换到目标字符串中的a,b或者c,并全部替换 另加上sub翻页操作: re.sub('start=\d ...

  6. python自学笔记(二)python基本数据类型之字符串处理

    一.数据类型的组成分3部分:身份.类型.值 身份:id方法来看它的唯一标识符,内存地址靠这个查看 类型:type方法查看 值:数据项 二.常用基本数据类型 int 整型 boolean 布尔型 str ...

  7. Python开发——数据类型【字符串】

    字符串定义 字符串是一个有序的字符的集合,用于存储和表示基本的文本信息 在Python中加了引号的字符,都被认为是字符串! 单引号.双引号.多引号之间的区别? 答案:单双引号没有区别 多引号的作用? ...

  8. 第二百九十五节,python操作redis缓存-字符串类型

    python操作redis缓存-字符串类型 首先要安装redis-py模块 python连接redis方式,有两种连接方式,一种是直接连接,一张是通过连接池连接 注意:以后我们都用的连接池方式连接,直 ...

  9. Python基础总结(字符串常用,数字类型转换,基本运算符与流程控制)

    一.字符串常用操作 #Python strip() 方法用于移除字符串头尾指定的字符(默认为空格) name='*egon**' print(name.strip('*'))#移除 name 变量对应 ...

随机推荐

  1. Iptabels防火墙和SElinux

    两者的区别: iptables用于设置防火墙(firewall), 即管理内外通信. iptables是Linux下功能强大的应用层防火墙工具iptables 能做到“控制内部机器上网与不上网,访问哪 ...

  2. UE4如何检测目标在锥形视野内

    转自:http://blog.csdn.net/l346242498/article/details/70237083 做UE4游戏AI方面经常会遇到一个问题,就是何如判定目标在AI单位的视野范围内, ...

  3. Postgresql 珍藏级文章

    https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server  如何设置参数值 https://www.cnblogs.com/zhao ...

  4. JIT和AOT编译详解

    JIT和AOT编译介绍 JIT - Just-In-Time             实时编译,即时编译 通常所说的JIT的优势是Profile-Based Optimization,也就是边跑边优化 ...

  5. Jquery的框架解析

    最近闲的刁痛,想看看jQuery源码.但是这个源码看起来 还是挺费劲的.所以呢整理一份框架出来, 避免走入jQuery关键字的误区,我用Gys代替关键字jQuery. 下面是源码: (function ...

  6. celipse关联hadoop源码

    可以在这里下载hadoop的源码包 https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/ 我自己下载的是hadoop2.6.0的源码包 ...

  7. CS229 6.15 Neurons Networks Deep Belief Networks

    Hintion老爷子在06年的science上的论文里阐述了 RBMs 可以堆叠起来并且通过逐层贪婪的方式来训练,这种网络被称作Deep Belife Networks(DBN),DBN是一种可以学习 ...

  8. 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. ...

  9. android:clipChildren属性,子布局超出父布局;

    是否允许子View超出父View的范围,Boolean型true .false ,默认true不允许: android:clipChildren="true":如下 android ...

  10. 读取txt文件赋值到DataGridView中

    先查看txt是每条信息之间是通过什么分割,我是通过换行符(\n)分割的, 然后再看每一条信息中字段是通过什么分割,我的字段是通过 tab键(\t)分割. 第一步 先获取到txt文件的路径: //获取绝 ...