2013-12-14 3 views
0

У меня есть файл, который содержит следующие строки. В этом я хочу прочитать строки между строкой, которая запускает forw и строку до конца .txt , скопируйте каждый набор выделенных строк в отдельные новые файлы, используя скрипт python.Как извлечь определенные строки из файла и сохранить определенные строки в каждом новом файле в python

forw l1tt DeleteULPhCH 0 
forw l1tt activate 1 
forw l1tt DeleteCCB 0 1 0 
forw l1tt DeleteDLPhCH 0 
BCH_CCB63.txt 
DL_BCH_PhCh.txt 
forw l1tt setuecontext 100 
forw l1tt DeleteCCB 65 1 0 
DL_BCH_PhCh.txt 

Мой вывод должен быть как:

forw l1tt activate 1 
forw l1tt DeleteULPhCH 0 
forw l1tt activate 1 
forw l1tt DeleteCCB 0 1 0 
forw l1tt DeleteDLPhCH 0 

в одном файле.

и в другом файле должно быть как:

forw l1tt setuecontext 100 
forw l1tt DeleteCCB 65 1 0 

Я использовал следующий код Python: Это извлекая только первый набор output.But я наклоняю возможность извлечь второй набор продукции после того, как с учетом перерыв условие. Пожалуйста, помогите мне в ближайшее время.

fin=open("script.txt","r") 
fout=open("output.txt","w") 
lines=fin.readlines() 
    for line in lines: 
     if re.search(r"(.*)(.txt)",line): 
      break 
     print line 
    fout.write(line) 
fin.close() 
fout.close() 

ответ

0

Кажется, что он не хочет, чтобы включить «.txt» строки в созданных файлов

import re 
n = 1 

with open("script.txt","r") as my_file: 
    my_list = [] 
    for line in my_file.readlines(): 
    if not re.search(r"(.*)(.txt)",line): 
     my_list.append(line) 
     with open("output"+str(n)+".txt","w") as out_file: 
     for item in my_list: 
      out_file.write(item) 
    else: 
     if my_list: 
     my_list=[] 
     n += 1 

Создает файлы:

$ cat output1.txt 
forw l1tt DeleteULPhCH 0 
forw l1tt activate 1 
forw l1tt DeleteCCB 0 1 0 
forw l1tt DeleteDLPhCH 0 

$ cat output2.txt 
forw l1tt setuecontext 100 
forw l1tt DeleteCCB 65 1 0 
+0

Большое спасибо. Он работает на 100% абсолютно – user3082400

+0

Добро пожаловать. Я рад, что смог помочь – skamsie

0

Используя простой наивный государственную машину вы можете сделать это следующим образом:

#!/usr/bin/env python 


n = 0 
output = [] 
state = 0 # 0 = start, 1 = forw 

with open("foo.txt", "r") as f: 
    for line in f: 
     line = line.strip() 
     if "forw" in line: 
      state = 1 
     if state == 1: 
      output.append(line) 
      if ".txt" in line: 
       state = 0 
       with open("{0:d}.txt".format(n), "w") as outf: 
        outf.write("\n".join(output)) 
        outf.write(line) 
       n += 1 
       output = [] 

Который производит следующие выходные файлы:

$ cat 0.txt 
forw l1tt DeleteULPhCH 0 
forw l1tt activate 1 
forw l1tt DeleteCCB 0 1 0 
forw l1tt DeleteDLPhCH 0 
BCH_CCB63.txtBCH_CCB63.txt 

$ cat 1.txt 
forw l1tt setuecontext 100 
forw l1tt DeleteCCB 65 1 0 
DL_BCH_PhCh.txtDL_BCH_PhCh.txt 

Это не совсем точно, что вы после , но это близко. Надеюсь, вы можете изменить это, чтобы удовлетворить ваши потребности.

Государственные машины очень полезны!

+0

спасибо так much.but я не понял с открытым («{0: d} .txt» .format (n), «w») как outf: эта строка ..... вы не указали «d» range.if {0: d} .txt, затем как появятся имена файлов? – user3082400

+0

Это довольно очевидно из вышеприведенного вывода. Выходные имена файлов будут '' 0.txt'', '' 1.txt'', '' 2.txt'', ... '' N.txt''. –

Смежные вопросы