Чтение файла для определенного раздела в Python
Я пытаюсь следовать ответу, приведенному здесь:
Как только читать строки в текстовом файле после определенной строки, используя Python?
при чтении только строки после определенной фразы, в которой я пошел логическим путем, или второго ответа.
Мне нужно получить только цифры между двумя открывающими и закрывающими секциями из файла
<type>
1
2
3
<type>
Однако, когда я использовал этот код:
found_type = False
t_ype = []
with open('test.xml', 'r') as f:
for line in f:
if '<type>' in line:
found_type = True
if found_type:
if '</type>' in line:
found_type = False
else:
t_line = str(line).rstrip('\n')
t_ype.append(t_line)
Я не могу пропустить первую строку и получить:
'<type>', '1','2','3'
Где я просто хочу
'1','2','3'
заканчивая добавление в список, когда я нажимаю, поскольку мне это не нужно в моем списке
Я не уверен, что делаю неправильно, и не могу спросить на странице, потому что мой представитель недостаточно высок.
3 ответа
Вы должны пропустить оставшуюся часть цикла for после обнаружения "заголовка". В вашем коде вы устанавливаете found_type
в True
а затем if found_type:
проверить совпадения.
found_type = False
t_ype = []
with open('test.xml', 'r') as f:
for line in f:
if '<type>' in line:
found_type = True
continue # This is the only change to your code.
# When the header is found, immediately go to the next line
if found_type:
if '</type>' in line:
found_type = False
else:
t_line = str(line).rstrip('\n')
t_ype.append(t_line)
Самый простой подход - это двойной цикл с выходом:
def section(fle, begin, end):
with open(fle) as f:
for line in f:
# found start of section so start iterating from next line
if line.startswith(begin):
for line in f:
# found end so end function
if line.startswith(end):
return
# yield every line in the section
yield line.rstrip()
Тогда просто позвоните list(section('test.xml','<type>','</type>'))
или перебрать for line in section('test.xml','<type>','</type>'):use lines
, если у вас есть повторяющиеся разделы, то обменять возврат на перерыв. Вам также не нужно вызывать str в строках, так как они уже являются строками. Если у вас большой файл, то групповой подход в комментариях может быть лучшей альтернативой.
Я хотел бы прочитать от 1 до 9 файла в python, начиная с ## $Numbers и заканчивая перед запуском ## $Next_numbers.