美文网首页
多级目录下多个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