解析整个目录 Etree Parse lxml
Parse entire directory Etree Parse lxml
我需要在一个目录中解析带有 xml 标记的 txt 文件(我已经创建了一个带有 glob 的语料库),但是 etree 解析一次只允许一个文件。如何设置一个循环来一次解析所有文件?然后目标是使用请求将这些文件添加到 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))
}
只需迭代 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
我需要在一个目录中解析带有 xml 标记的 txt 文件(我已经创建了一个带有 glob 的语料库),但是 etree 解析一次只允许一个文件。如何设置一个循环来一次解析所有文件?然后目标是使用请求将这些文件添加到 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))
}
只需迭代 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