zoukankan      html  css  js  c++  java
  • python改XML

     1 from lxml import etree
     2 import os
     3 
     4 
     5 # 查询文件夹中所有的xml文件,存到xml_files中
     6 def findXmlFile(filePath):
     7     xml_files =[]
     8     for root, folder, files in os.walk(filePath):
     9         for file in files:
    10             if file.endswith('.xml'):
    11                 xml_files.append(os.path.join(root, file))
    12     return xml_files
    13 
    14 
    15 
    16 #模糊匹配目录xml文件名,符合条件的文件存到target_file列表中
    17 def fuzzyfinder(user_input, xml_files):
    18     target_file =[]
    19     for xml_file in xml_files:  # 遍历文件夹中的文件,i:'d:\xml\LiveCheck_Provider_HttpRS1.xml'
    20         if xml_file.find(user_input) > 0:
    21             target_file.append(xml_file)
    22     return target_file
    23 
    24 
    25 #查找要替换的目标元素
    26 def findByXpath(target_file,target_filed):
    27     #循环查找遍历xml文件
    28     ret = []
    29     elementName = []
    30     for path in target_file:
    31         xml = etree.parse(path, etree.HTMLParser()) #利用lxml解析库的 etree.parse方法
    32         target_filed_lower = target_filed.lower()  # 转换为小写
    33         command = '//@' + target_filed_lower  # 目标字段转成://@rateplancode
    34         result = xml.xpath(command)  # 用xpath找到目标,结果是list,如有RatePlanCode="DSRPLO01",RatePlanCode="DSRPLO02",用//@rateplancode找到的值是:['DSRPLO01', 'DSRPLO02']
    35         fileName = "文件名:" + os.path.basename(path)  # 获取文件名,如:文件名:LiveCheck_P1rovider_HttpRS.xml
    36         print fileName
    37         for i in range(len(result)):  # 遍历xpath查到的结果
    38             str = target_filed + '="' + result[i] + '"'  # 把字段和结果拼接起来,RatePlanCode="DSRPLO01",RatePlanCode="DSRPLO02"
    39             elementName.append(str)  # 拼接结果放到列表
    40         print(elementName)
    41         ret.append(elementName)
    42         elementName = []
    43 
    44 def my_Replace(content, target_filed, new_filed, index=0):
    45     # 替换成修改的数据
    46     print target_filed, new_filed, index
    47     str = content.replace(target_filed, new_filed, int(index))
    48     # 把前面被替换的数据修改回来
    49     a = int(index) - 1
    50     ret = str.replace(new_filed, target_filed, a)
    51     return ret
    52 
    53 def writeXML(target_file,target_filed,new_filed,index):
    54     # 替换内容并写入文件
    55     for path in target_file:
    56         with open(path, "r") as file:
    57             fullcontent = file.read()#获取文件所有内容
    58         if len(index) == 0:
    59             content = fullcontent.replace(target_filed,new_filed)
    60         else:
    61             content = my_Replace(fullcontent,target_filed,new_filed,index)
    62         f = open(path, 'w')
    63         f.write(content)
    64         f.close()
    65 
    66 
    67 if __name__ == '__main__':
    68     xml_files =[]
    69     elementNames=[]
    70     #遍历文件夹中xml的数量
    71     xml_files = findXmlFile("D:/xml")
    72     if len(xml_files):
    73         print("文件夹中所有XML文件:")
    74         print(xml_files)
    75         user_input = raw_input("请输入需要修改的文件名(大小写敏感):")
    76         target_file = fuzzyfinder(user_input,xml_files)
    77         if len(target_file):
    78             print("匹配到的XML文件:")
    79             print target_file
    80             target_filed = raw_input("输入需要查询的元素: ")
    81             while(1):
    82                 findByXpath(target_file, target_filed)
    83                 old = raw_input("输入需要修改原内容:")
    84                 new = raw_input("输入需要修改后的内容:")
    85                 i = raw_input("输入需要修改的下标:")
    86                 if old == '':
    87                     break
    88                 else:
    89                     writeXML(target_file,old,new,i)
    90         else:
    91             print ("没有匹配到XML文件")
    92     else:
    93         print("文件夹中不存在XML文件:")
  • 相关阅读:
    Docker部署
    编写一个脚本用户进入容器
    Shell脚本写的《俄罗斯方块》
    Linux磁盘分区(9)
    Linux任务调度(8)
    Linux权限管理(7)
    Linux组管理(6)
    Linux实用指令(5)
    C#中 char、byte、string
    编码转换
  • 原文地址:https://www.cnblogs.com/fenggf/p/12445568.html
Copyright © 2011-2022 走看看