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 变量对应 ...
随机推荐
- sas 配置文件和AutoExec
AS代码中常常会用用到一些个人习惯的编码定义,每次重复写,效率会很低,这时可以通过AutoExec 写入到系统默认项里. 如我最经常使用的: OPTIONS NOCENTER LS=MAX PS=MA ...
- EXT.NET 一些用法
EXT.NET 一些用法 <ext:GridPanel ClicksToEdit="1" <%-- 点击几下单元格可编辑 1 代表单击一下.--%> > & ...
- 2-自己动手写HashMap
public class Entry { // 键 private Object key; // 值 private Object value; //构造器 public Entry(Object k ...
- 常见的web安全及防护原理
1.0 sql注入 sql注入原理:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. sql注入防护: 1.永远不要信任用户的输入,要 ...
- Chapter1:Qt概念
信号和槽1.信号与槽机制的连接方式(1):一个信号可以与另一个信号相连,代码如下: connect(Object1,SIGNAL(signal1),Object2,SIGNAL(signal1)); ...
- insert into table 插入多条数据
方法1: insert into `ttt` select '001','语文' union all select '002','数学' union all select '003','英语'; 方法 ...
- solr如何让全词匹配结果在最前面
在全文搜索中默认排序是按照匹配度权值score排序的,权值越大位置越靠前,那为什么有很多时候全词匹配反而不在最前面那,其实很简单因为全词匹配权值也就是100,但是还有很多权值大于100的排在了前面. ...
- Vue学习记录(二)
一.指令 指令是Vue.js中一个重要的特性,主要提供了一种机制将数据的变化映射为DOM行为.当数据变化时,指令会依据设定好的操作对DOM进行修改,这样就可以只关注数据的变化,而不用去管理DOM的变化 ...
- 洛谷 : P3374 【模板】树状数组 1 P3368 【模板】树状数组 2
******************************************************************************** 属于模板题了,一个单点修改区间询问,一 ...
- Spring MVC开启注解
1.在spring的配置文件中配置:<context:annotation-config />该项配置只能应用于已经注册的bean,比较难用,不深究. 2.在spring的配置文件中使用c ...