python删除文件夹下所有xml文件中重复的词条

本文中的代码实现删除一个文件夹下所有的xml文件中的重复词条(重复词条指同一个xml中的)。

例如有下列目录结构(上传不了图片):

 res:(目录)

     value:(子目录)

          string.xml

    valus-es:(子目录)

          string.xml

要删除子目录下string.xml中的重复词条,就可以使用下面的代码,将代码保存为.py文件放在res下。

进入res目录运行.py文件即可。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from xml.dom.minidom import parse
from xml.dom.minidom import Document
import xml.dom.minidom
import xml.dom.minidom as Dom
import os
import os.path
import codecs
import glob
path = os.path.abspath('.')
print path
dirNames = [x for x in os.listdir('.') if os.path.isdir(x)]#当前目录下的所有文件夹
for name in dirNames:
    if "value" in name:#文件夹名中含value
        print path+"\\"+name#打印文件夹名
        newPath=path+"\\"+name
        files=glob.glob(newPath+"\*.xml")#找出所有含value文件夹中的xml文件
        for file in files:#对xml文件中重复的词条进行删除
            print file
            newFile=(os.path.basename(file).split("."))[0]+".xml"
            newfile2= file#newPath + "\\" + newFile
            print "newfile2: %s" % newfile2
            DOMTree=xml.dom.minidom.parse(file)
            Collection=DOMTree.documentElement
            strs=Collection.getElementsByTagName("string")
            i=0
            a=len(strs)
            for str in strs:
                j=i
                for str1 in strs:
                    strName=str.getAttribute("name")
                    strContext=str.childNodes[0].data

                    str1Name=strs[j+1].getAttribute("name")
                    str1Context=strs[j+1].childNodes[0].data
                    j=j+1
                    if (strName==str1Name) and (strContext==str1Context):#有重复生成新文件
                        #Collection.removeChild(strs[j+1])
                        Collection.removeChild(str)
                        f = codecs.open(newfile2,'w','utf-8')
                        DOMTree.writexml(f,encoding = 'utf-8')#不需要单独在设置格式
                        f.close()
                        #print strName
                    if j==(a-1):
                        break
                i=i+1
                if i==(a-1):
                   break
运行效果参见 老司机


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值