解析整个目录Etree Parse lxml

时间:2016-08-05 11:50:33

标签: python xml lxml elementtree jupyter

我需要在目录中解析带有xml标记的txt文件(我已经使用glob创建了一个语料库),但是etree parse一次只允许一个文件。如何设置循环以一次解析所有文件?然后,目标是使用请求将这些文件添加到Elasticsearch。这就是我到目前为止所做的:

import json
import os
import re
from lxml import etree
import xmltodict 
import glob

corpus=glob.glob('path/*.txt')
ns=dict(tei="http://www.tei-c.org/ns/1.0")
tree = etree.ElementTree(file='path/file.txt')
doc = {
    "author": tree.xpath('//tei:author/text()', namespaces=ns)[0],
    "title": tree.xpath('//tei:title/text()', namespaces=ns)[0],
    "content": "".join(tree.xpath('//tei:text/text()', namespaces=ns))
    }

1 个答案:

答案 0 :(得分:1)

只需迭代corpus列表即可。但是,您需要使用诸如列表或字典之类的容器来保存单独解析的数据。下面假定.txt文件是格式良好的.xml文件并保持相同的结构,包括tei命名空间:

import os, glob
from lxml import etree

corpus = glob.glob('path/*.txt')
ns = dict(tei="http://www.tei-c.org/ns/1.0")

xmlList = []; xmlDict = {}

for file in corpus:
    tree = etree.parse(file)
    doc = {
           "author": tree.xpath('//tei:author/text()', namespaces=ns)[0],
           "title": tree.xpath('//tei:title/text()', namespaces=ns)[0],
           "content": "".join(tree.xpath('//tei:text/text()', namespaces=ns))
          }
    # LIST OF DOC DICTS
    xmlList.append(doc)                

    # DICTIONARY OF DOC DICTS, KEY IS FILE NAME
    key = os.path.basename(file).replace('.txt', '')
    xmlDict[key] = doc