2015-06-08 3 views
0

Мне нужно извлечь два блока текста из нескольких файлов и поместить их в отдельные списки с помощью 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 вместо фактического значения пути. Есть ли способ обойти это?

+0

что содержание исходного файла? – farhawa

+0

Самый простой способ проанализировать эти строки - это, вероятно, «exec» содержимое файла, на которое, как правило, нахмурились, поэтому, если я могу спросить, почему файлы выложены так? Вероятно, это проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – TigerhawkT3

+0

Поделитесь своим регулярным выражением? –

ответ

0

Я полагаю, что содержимое файла:

prj_files = [ 
    line, 
    line, 
    etc 
] 

prj_files_2 = [ 
    line, 
    etc 
] 

, то вы можете сделать это:

exec open(YOUR_FILE).read() 
f1 = open(FIRST_FILE,"w") 
f2 = open(SECOND_FILE,"w") 
for line in pjr_files: 
    f1.write(line) 
for line in pjr_files_2: 
    f2.write(line) 
Смежные вопросы