python解析xml文档,数据清洗,并入库操作

# coding=utf-8
import os
import re
import string

__author__ = 'peng'
from xml.dom import minidom
import sys

def xmlToTxt(xmlString):
    #打开文件 把汉字编号gbk改成utf-8格式
    file_xml = open(xmlString, "r").read()
    file_xml = file_xml.replace('<?xml version="1.0" encoding="gbk" standalone="no" ?>','<?xml version="1.0" encoding="utf-8" standalone="no" ?>')
    file_xml = unicode(file_xml, encoding='gbk').encode('utf-8')
    doc = minidom.parseString(file_xml)
    #解析XML,text和instance的内容
    root = doc.documentElement
    texts = root.getElementsByTagName("text")
    instances = root.getElementsByTagName("instance")
    #循环读取instances数据并做数据入库准备
    for instance in instances:
        print("-------------------------------------------")
        print (instance.getAttribute("waveuri").split('/')[1])
        text_name = instance.getAttribute("waveuri").split('/')[1]
        print("-------------------------------------------")
    reload(sys)
    sys.setdefaultencoding( "utf-8" )
    file_text_name = "e:\\"+text_name+ ".txt"
    print(file_text_name.replace(' ',''))
    #打开另外一个文件内容,对数据进行填写
    file_text = open(file_text_name,"w")
    #读取数据并去除标点符号
    for text in texts:
        print("-------------------------------------------")
        print (text.nodeName)
        if (len(text.toxml().split('<text>'))==1):
            txt = ""
        else:
            txt =text.toxml().split('<text>')[1].split('</text>')[0]
        print(type(txt.encode('utf-8')))
        #去除标点符号编码,只能一个一个来,如果写循环会出现乱码,原因未知
        finalstring = txt.encode('utf-8')
        identify = ','
        finalstring = finalstring.replace(identify, "")
        identify = '。'
        finalstring = finalstring.replace(identify, "")
        identify = '!'
        finalstring = finalstring.replace(identify, "")
        identify = '?'
        finalstring = finalstring.replace(identify, "")
        print(finalstring)
        #最终写入数据
        file_text.write(finalstring)
        print("-------------------------------------------")

    file_text.close()

if ( __name__ == "__main__"):
    #文件地址
    source = "e:\\" +"文件地址"
    #循环读取文件调用方法解析
    for root, dirs, files in os.walk( source ):
        for OneFileName in files :
            print(OneFileName)
            xmlToTxt("e:\\"+ "文件地址" +OneFileName)









转载于:https://my.oschina.net/u/2262458/blog/473630

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值