2016-08-05 7 views
-1

Мне нужно разобрать txt-файлы с разметкой xml в каталоге (я уже создал корпус с glob-файлом), но простой синтаксический анализ позволяет только один файл за один раз. Как настроить цикл для одновременного анализа всех файлов? Цель состоит в том, чтобы добавить эти файлы в Elasticsearch с помощью запросов. Это то, что я до сих пор:Парсировать весь каталог Etree Parse lxml

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)) 
    } 
+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  
Смежные вопросы