В настоящее время я пытаюсь проанализировать большой файл, содержащий несколько файлов XML, соединенных внутри.В настоящее время я могу получить каждый элемент в допустимом формате XML, за исключением последнего.Я решил попробовать свою функцию, которая включает в себя только подмножество из 4 сцепленных XML-файлов.
Функция заключается в следующем:
def read_bulk_file(bulk_file): #better name pending
with open(bulk_file, 'r') as f:
next(f)
document = ''
document += '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n'
n = 1
for line in f:
if '<?xml version=\"1.0\" encoding=\"UTF-8\"?>' in line:
print('Sending batch ' + str(n) + '...', end='')
yield document
print('Success!')
n += 1
print('Resetting document for item ' + str(n) + '...', end='')
document = ''
print('Success!')
print('Adding xml declaration tag for item ' + str (n) + '...', end='')
document += '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n'
print('Success!')
else:
document += line
Сценарий, который я использую для запуска своей функции:
text_generator = read_bulk_file('./Data/test_xml.xml')
n = 1
while True:
try:
print('Reading Item #' + str(n) + ': ', end='')
n += 1
with open('./Data/results/item' + str(n-1) + '.xml', 'w') as o:
o.write(next(text_generator))
print('You have created item file #' + str(n-1) + '!')
except StopIteration:
print('Generator function didn\'t find more items!')
break
Наконец, вывод в консоли:
Чтение Элемента # 1: Отправка пакета 1 ... Вы создали файл элемента # 1!
Чтение Пункт № 2: Успех!
Сброс документа для элемента 2 ... Успех!
Добавление тега объявления XML для элемента 2 ... Успех!
Отправка пакета 2 ... Вы создали файл элемента № 2!
Чтение Пункта № 3: Успех!
Сброс документа для пункта 3 ... Успех!
Добавление тега объявления xml для элемента 3 ... Успех!
Отправка пакета 3 ... Вы создали файл элемента № 3!
Чтение элемента № 4: Успех!
Сброс документа для элемента 4 ... Успех!
Добавление тега объявления XML для элемента 4 ... Успех!
Функция генератора не нашла больше элементов!
Как вы видите, файл не создан для элемента 4. Я почти уверен, что это связано со StopIteration.генерируется исключение.
Я дважды проверил, что файл читается до конца, и, похоже, так оно и было, и поэтому я предположил бы, что переменная документа существовала до этого момента,прямо перед исключением.
Есть ли способ получить содержимое последней итерации до возникновения исключения?