Мне нужно извлечь два блока текста из нескольких файлов и поместить их в отдельные списки с помощью python. Первый блок начинается с строки 30 и не слишком сложно извлечь. Второй блок запускает 2 строки после первого блока; проблема в том, что блоки могут иметь переменную длину. Например:Python извлечение блоков текста из файла
prj_files = [
line,
line,
etc
]
prj_files_2 = [
line,
etc
]
Так что мне нужно взять все строки между [] в первом блоке и поместить его в один список, и взять строки между [] во втором блоке, и поместить его в другой список. По состоянию на данный момент, я использую:
for i, line in enumerate(prj):
if i > 29:
начать на определенной строке, а затем она использует регулярное выражение для поиска «]», где он ломает цикл и записывает строки она заканчивается на в НКТ. Затем я использую другой цикл for, чтобы начать с cnt + 2, чтобы извлечь второй блок. Хотя я думаю, что это работает, я чувствую, что он супер неэффективен, так как я в основном делаю то же самое дважды. Есть ли очевидный лучший метод, который мне не хватает?
EDIT: Вместо этого вместо анализа файла я попытался использовать import
. Я думаю, что это намного проще, но поскольку я просматриваю некоторые файлы, чтобы найти все файлы, у меня есть общая переменная, которая представляет имя файла. Это означает, что когда я пытаюсь использовать переменную для импорта файла, я получаю, что в модуле нет ошибки. Так, например, мое имя переменной py_file
, а import
читает это как py_file
вместо фактического значения пути. Есть ли способ обойти это?
что содержание исходного файла? – farhawa
Самый простой способ проанализировать эти строки - это, вероятно, «exec» содержимое файла, на которое, как правило, нахмурились, поэтому, если я могу спросить, почему файлы выложены так? Вероятно, это проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – TigerhawkT3
Поделитесь своим регулярным выражением? –