Python: поиск разделов из текстового файла с использованием обратной петли - PullRequest
0 голосов
/ 05 декабря 2018

В Python у меня есть входной текстовый файл (, как показано ниже ), который включает 3 раздела текста, и мне нужно сначала найти все строки в нижней части каждого раздела текста, который включает в себя 'shsux / en' , а затем в этом разделе я хотел бы вернуться назад и найти все строки, начинающиеся с 'udp' и 'jkp' , и вывестиВесь раздел в новый текстовый файл.

hsussksdjeoslllllllllllll/shsux/ujkes
        jkp_shsu_hhhhhhhhhhhhhhhhhhhhhhhhh
        jkp_shsu_hhhhhhhhhsesssssssssssssssss
        jkp_shsu_hhhhhhhhhsesssssssssssssssss
hsussksdjeoslllllllllllll/shsux/en
------------------------------------------------------------
hsussksdjeoslllllllllllll/shsux/sed
        udp_shsu_hhhhhhhhhhhhhhhhhhhhhhhhh
        udp_shsu_hhhhhhhhhsesssssssssssssssss
        jkp_shsu_hhhhhhhhhsesssssssssssssssss
hsussksdjeoslllllllllllll/shsux/en
------------------------------------------------------------
hsussksdjeoslllllllllllll/dfsux/df
        udp_shsu_hhhhhhhhhhhhhhhhhhhhhhhhh
        udp_shsu_hhhhhhhhhsesssssssssssssssss
        jkp_shsu_hhhhhhhhhsesssssssssssssssss
hsussksdjeoslllllllllllll/dfsux/en
------------------------------------------------------------

Так, например, первая строка с '/ shsux / en' является

hsussksdjeoslllllllllllll/shsux/en

Сначала мне нужно найти это, и как только я это получу, мне интересно, как яможет выполнить обратную петлю для секции

        jkp_shsu_hhhhhhhhhhhhhhhhhhhhhhhhh
        jkp_shsu_hhhhhhhhhsesssssssssssssssss
        jkp_shsu_hhhhhhhhhsesssssssssssssssss

и вернуть строки с 'jkp'

Любое предложение для функций, которые мне следует использовать, и как я могу подойти к этому.Спасибо!

1 Ответ

0 голосов
/ 05 декабря 2018

Обратите внимание, что невозможно перечислить все строки из раздела, которые соответствуют некоторому условию, если вы не можете указать, как блок блок (и у вас есть несколько различных разделов в одном файле).Но, предполагая, что вы знаете только, как заканчивается раздел, вы можете дважды зациклить свой входной файл.На первой итерации вы можете хранить номера строк, в которых вы найдете строку "end of section".Что-то вроде:

end_of_section_line_nb = []

for counter, line in enumerate(file):
    if #condition to check, use regex or just "some_string in line", depending on your needs
    end_of_section_line_nb.append(counter)

Затем снова зациклите файл и найдите каждое вхождение строки ("udp" ...) в любом блоке.После первой итерации у вас есть номера строк, которые заканчивались разделом, так что вы можете проверить, в каком разделе вы находитесь.

Таким образом, вы будете назначать материал "udp" для следующего следующего распознанного блока, но вы не будетеможет определить, находится ли он в нем (поскольку вы не указали, как начинается блок).

Вы также можете перебрать файл один раз и всегда сохранять в памяти некоторое количество предыдущих строк, но это будет неэффективно, если ваши разделыбольшой.

...