美文网首页
多级目录下多个txt中的内容存储至一个xml文件

多级目录下多个txt中的内容存储至一个xml文件

作者: 夜空中最亮的星_6c64 | 来源:发表于2018-10-12 23:26 被阅读0次

    注释很清晰。

    1.读取txt的内容,建立xml元素结点

    # coding=utf-8  2017/4/7
    __author__ = 'Asktao'
    import os
    import io
    
    from xml.dom.minidom import Document
    
    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    class readFileToXML(object):
        def __init__(self, filepath):
            self.JSON_dict = {"hosts": {}}
            #最开始创建好root节点
            self.doc = Document()  # 创建DOM文档对象
            self.root = self.doc.createElement('root')  # 创建根元素
            self.doc.appendChild(self.root)
    
            dirs0 = os.listdir(filepath)#[sports,news]
            for dir0 in dirs0:
                # 最外层目录【体育 佛学】遍历 创建parentTitle
                # 创建root下第一节点parentTitle
                self.parentT = self.doc.createElement('parentTitle')
                self.root.appendChild(self.parentT)
    
                par = os.path.join(filepath, dir0)
                dirs1 = os.listdir(par)#[cna,nba]
                for f0 in dirs1:
                    # 上级目录下类别目录下【NBA CBA】遍历 subTitle
                    # 创建parentTitle下节点subTitle
                    self.subT = self.doc.createElement('subTitle')
                    self.parentT.appendChild(self.subT)
    
                    child0 = os.path.join(par,f0)
                    dirs2 = os.listdir(child0)
                    for f1 in dirs2:
                        # 上级目录下每个文件即每个新闻【具体新闻1 新闻2】遍历 subTitle
                        # 创建parentTitle下节点subTitle
                        child1 = os.path.join(child0,f1)
                        if os.path.isfile(child1):
                            self.filepath = child1  # 新闻完整路径
                            self._path = os.path.split(child1)[0]  # 文件的路径
                            self.subTitle = os.path.split(self._path)[-1]#子类别 【CBA】
                            self.prefix = os.path.split(self._path)[0]#CBA所属的文件路径
                            self.parentTitle = os.path.split(self.prefix)[-1]#父类别 【体育】
                            self._filename = os.path.split(child1)[1]  # 文件的名称
    
                    #self.DATA_JSON = readFileToXML.readFileToDict(self)  # JSON格式数据
                    #self.DATA_XML = readFileToXML.json2XML(self)  # XML格式数据
    
                            #生成JSON格式数据,生成XML格式数据
                            # 每条新闻存放到一个大节点里
                            self.DATA_XML = readFileToXML.readFileToDictToXML(self)
                    # 每个类别存放到一个大节点里【CBA NBA】
                    self.subT.setAttribute("title", self.subTitle)
                # 每个类别存放到一个大节点里【体育 佛学】
                self.parentT.setAttribute("title", self.parentTitle)
    
    
        def readFileToDictToXML(self):
    
            '''
            解析原始文件,提取信息存为字典格式(JSON)
            '''
            # 用于这里原始文件的数据,编排成JSON格式。
            with io.open(self.filepath, "r", encoding = 'utf8') as file:
                #读取新闻内容
                lines = file.readlines()
                # 读取新闻大类别 过滤换行
                self.parentTitle = lines[1].strip('\n')
                # 读取新闻子类别 过滤换行
                self.subTitle = lines[3].strip('\n')
    
                # 读取新闻url 过滤换行
                self.sonUrl = lines[4].strip('\n')
                # 读取新闻标题 过滤换行
                self.head = lines[5].strip('\n')
                # 读取新闻时间 过滤换行
                self.time = lines[6].strip('\n')
                # 读取新闻内容 过滤换行
                self.content = lines[7].strip('\n')
    
                # 判断JSON_dict中索引是否存在,如不在则创建
                if not self.parentTitle in self.JSON_dict["hosts"]:
                    # 用parentTitle做索引(用parentTitle做一级目录)
                    self.JSON_dict["hosts"][self.parentTitle] = {}
                # 判断JSON_dict中索引是否存在,如不在则创建
                if not self.subTitle in self.JSON_dict["hosts"][self.parentTitle]:
                    # 用subTitle做索引(用subTitle做二级目录)
                    self.JSON_dict["hosts"][self.parentTitle][self.subTitle] = {}
    
                # 创建subTitle下节点sonT,存放url head time content
                self.sonT = self.doc.createElement('son')
                self.subT.appendChild(self.sonT)
    
                # 创建sonT下节点url
                self.JSON_dict["hosts"][self.parentTitle][self.subTitle]["sonUrl"] = self.sonUrl  # 添加url到JSON_dict
                self.url = self.doc.createElement('url')
                self.url_data = self.doc.createTextNode(
                    self.JSON_dict["hosts"][self.parentTitle][self.subTitle]["sonUrl"].encode('utf-8'))
                self.url.appendChild(self.url_data)
                self.sonT.appendChild(self.url)
    
    
                #self.sonT.setAttribute("title",self.JSON_dict["hosts"][self.parentTitle][self.subTitle]["sonUrl"].encode('utf-8'))
    
                # 创建sonT下节点head
                self.JSON_dict["hosts"][self.parentTitle][self.subTitle]["head"] = self.head  # 添加机器名到JSON_dict
                self.head = self.doc.createElement('head')  # 创建Platform第一节点Module
                self.head_data = self.doc.createTextNode(
                    self.JSON_dict["hosts"][self.parentTitle][self.subTitle]["head"].encode('utf-8'))
                self.head.appendChild(self.head_data)
                self.sonT.appendChild(self.head)
    
                # 创建sonT下节点time
                self.JSON_dict["hosts"][self.parentTitle][self.subTitle]["time"] = self.time  # 添加time到JSON_dict
                self.time = self.doc.createElement('time')
                self.time_data = self.doc.createTextNode(
                    self.JSON_dict["hosts"][self.parentTitle][self.subTitle]["time"].encode('utf-8'))
                self.time.appendChild(self.time_data)
                self.sonT.appendChild(self.time)
    
                # 创建sonT下节点content
                self.JSON_dict["hosts"][self.parentTitle][self.subTitle]["content"] = self.content
                self.content = self.doc.createElement('content')
                self.content_data = self.doc.createTextNode(self.JSON_dict["hosts"][self.parentTitle][self.subTitle]["content"])
                self.content.appendChild(self.content_data)
                self.sonT.appendChild(self.content)
    
            #return self.JSON_dict
            return self.doc.toprettyxml(indent='')
    
        def json2XML(self):
            '''
            生成XML文档。
            for self.parentTitle in self.DATA_JSON["hosts"]:
                for self.subTitle in self.DATA_JSON["hosts"][self.parentTitle]:
                    #sonT = self.doc.createElement('son')
                    self.sonT.setAttribute("title", self.DATA_JSON["hosts"][self.parentTitle][self.subTitle]["head"].encode('utf-8'))
    
                    self.sonUrl = self.doc.createElement('sonUrl')  # 创建Platform第一节点Module
                    self.sonUrl_data = self.doc.createTextNode(self.DATA_JSON["hosts"][self.parentTitle][self.subTitle]["sonUrl"].encode('utf-8'))
                    self.sonUrl.appendChild(self.sonUrl_data)
                    self.sonT.appendChild(self.sonUrl)
    
                return self.doc.toprettyxml(indent='')
                '''
    
        def makeXML(self):
            f = io.open('scrawlToXML' + '.xml', 'w', encoding="UTF-8")
            f.write(self.DATA_XML)
            f.close()
    

    2.调用生成xml文件:

    # -*- coding: utf-8 -*-
    # -*- coding: utf-8 -*-
    import readFileToXML as RFTX
    
    # 实例化
    TEST = RFTX.readFileToXML("/Users/Zd/Desktop/newsSpider/data/")
    # 在当前目录下生成XML文件
    TEST.makeXML()
    
    # 打印JSON格式数据
    #print("JSON格式:%s" % TEST.DATA_JSON)
    
    # 打印XML格式数据
    print("XML格式:\n %s " % TEST.DATA_XML)
    
    print(TEST._path)  # 路径
    print(TEST._filename)  # 文件名
    

    3.参考:

    https://blog.csdn.net/sxf_123456/article/details/77145855
    

    相关文章

      网友评论

          本文标题:多级目录下多个txt中的内容存储至一个xml文件

          本文链接:https://www.haomeiwen.com/subject/xaenaftx.html