zoukankan      html  css  js  c++  java
  • 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:pyyeahsource.txt'
        file2 = 'D:pyyeahdest.txt'
        file3 = 'D:pyyeahmacro.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()
    

      

  • 相关阅读:
    centos7安装Nginx
    activiti数据库表结构剖析
    Consider defining a bean named 'entityManagerFactory' in your configuration解决办法
    mongodb远程数据库的连接以及备份导入导出数据
    在阿里云ECS CentOS7上部署基于MongoDB+Node.js的博客
    node.js搭建Web服务器
    Spring Boot 引入org.springframework.boot.SpringApplication出错
    CentOS7搭建SVN服务器
    Linux环境下MySQL报Table 'xxx' doesn't exist错误解决方法
    Linux内核协议栈 NAT性能优化之FAST NAT
  • 原文地址:https://www.cnblogs.com/xqn2017/p/8442732.html
Copyright © 2011-2022 走看看