#python #python-3.x #parsing #saxparser
#python #python-3.x #синтаксический анализ #saxparser
Вопрос:
Вопрос для начинающих — у меня есть анализатор Python SAX, который извлекает строки текста из файла .xml и записывает их в файл .txt. Теперь я хочу, чтобы он запускался для всех файлов в каталоге и выводил выходное имя файла из входного имени файла, но я не могу заставить это работать.
Сам анализатор работает нормально, поэтому в приведенном ниже коде я просто показал блоки, в которых указаны входные и выходные файлы. Есть предложения по простому способу сделать это?
# Code begins
import sys
import re
from enum import Enum
sys.stdout = open("outputab123.txt", "w", encoding="UTF-8")
import xml.sax
# ~ 50 lines of SAX parser code
# Final block of code
parser.parse("ab123.xml")
sys.stdout.close()
Для каждого выходного файла .txt я просто хочу взять имя входного файла .xml и поместить «output» впереди.
Комментарии:
1. Вы рекурсивно анализируете все файлы в каталоге?
2. Да, или я хочу, по крайней мере.
Ответ №1:
Вы можете взять входное имя файла, разделить его, чтобы получить часть перед точкой, а затем добавить «output» и «.txt»:
xmlfile = "ab123.xml"
txtfile = "output" xmlfile.split(".")[0] ".txt"
print(txtfile)
Вывод:
outputab123.txt
Итак, в целом ваш код может выглядеть примерно так:
listofiles = # define list of files here (eg. using glob)
for xmlfile in listoffiles:
# parsing here
parser.parse(xmlfile)
sys.stdout.close()
txtfile = "output" xmlfile.split(".")[0] ".txt"
sys.stdout = open(txtfile, encoding="UTF-8")
# write to text file here
Чтобы получить список .xml
файлов в каталоге, вы можете использовать glob:
listoffiles = glob.glob("/path/to/directory/*.xml")
Комментарии:
1. Спасибо. Используя этот подход, где я должен указать входной каталог? Я получаю сообщение об ошибке, как показано ниже: Трассировка (последний последний вызов): Файл «C:/Users/mypath/parser.py «, строка 5, в <module> для xmlфайла в listoffiles: Ошибка имени: имя ‘listoffiles’ не определено
2.
listoffiles
должно быть определено передfor
циклом. Редактирование моего ответа.3. Отличный материал — спасибо! Мне пришлось переработать одну строку как
txtfile = xmlfile.split(".")[0] "output.txt"
, чтобы она не помещала «output» в начало пути к файлу, и с этим изменением она делает именно то, что я хотел.