需求:

根据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. third party sales process 继续说

    Trading company: A vendor或production plant: B END Customer: C third party sales与individual purchasin ...

  2. OpenJuege 兔子与星空

    总时间限制:  1000ms 内存限制:  10000kB 描述 很久很久以前,森林里住着一群兔子.兔子们无聊的时候就喜欢研究星座.如图所示,天空中已经有了n颗星星,其中有些星星有边相连.兔子们希望删 ...

  3. 第5章 IP地址和子网划分(1)_IP格式和子网掩码

    1. 二进制和十进制 (1)二进制与十进制的对应关系 ①128为数轴的中点,最高位为1.其后的数,二进制最高位均为1.其前面的数二进制最高位均为0. ②192为128-255中间的数,最高两位为1.2 ...

  4. Android---页面跳转

    1.首先在一个布局文件(.XML)中绘画了一个跳转按钮(id为btn1): <Button         android:id="@+id/btn1"         an ...

  5. MySQL提供了以下三种方法用于获取数据库对象的元数据

    MySQL提供了以下三种方法用于获取数据库对象的元数据: 1)show语句 2)从INFORMATION_SCHEMA数据库里查询相关表 3)命令行程序,如mysqlshow, mysqldump 用 ...

  6. 微信小程序开发warning: Now you can provide attr "wx:key" for a "wx:for" to improve performance

    用微信官方的模板发现突然报了这个warning,检查原因: 官方解释: wx:key 如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 <i ...

  7. hadoop 问题及解决方式

    转自http://www.bkjia.com/ASPjc/931209.html 解决Exception: org.apache.hadoop.io.nativeio.NativeIO$Windows ...

  8. linux的系统调优

    例1:找出前当系统中,CPU负载过高的服务器? 服务器1: load average: 0.15, 0.08, 0.01 1核 服务器2: load average: 4.15, 6.08, 6.01 ...

  9. uiautomator 代码记录 :BT接收测试

    package rom; import java.lang.*; import java.util.Random; import java.io.File; import com.android.ui ...

  10. 关于IK 分词器

    准备: 1 创建索引: PUT my_index PUT my_index2 2 先做好映射: PUT /my_index/*/_mapping { "properties": { ...