2016-04-04 17 views
4

Ich habe eine Textdatei, die bestimmte Regeln enthält. Hier Format für sie:Passen Sie das Muster und drucken nächste Zeile

:SchoolName (rule_1) 
) 
:xyz (true) 
:abc_efg (
    : xxyyzz-x1y1-z1z2-z3z4 
) 
  1. ich passen wollen ': abc_efg' und erhalten Linie nach dem Spiel also ': xxyyzz-x1y1-z1z2-z3z4'
  2. Jedesmal gibt es eine neue Datei, die es für aussehen würde ‚: abc_efg‘ und erhalten nach dem Spiel entsprechende Zeile

Bisher habe ich versucht

with open('G:\CM\Python Exercises\Project_F\abc.txt') as f: 
    text = f.read() 
    list1=text.strip('\n\t').split(':') 
    print list1 
    for line in list1: 
     if ':abc_efg' in list1: 
      print line 
      print '\n'.join(list1[i+1]) 

Druck liste1

[':abc_efg (\n\t\t\t', ': xxyyzz-x1y1-z1z2-z3z4 \n\t\t)\n\t\t'] 

Antwort

0

Verwenden f.readline zeigt() eine Datei Zeile für Zeile zu lesen.

Es macht es leicht, die nächste Zeile zu bekommen, wenn es eine Übereinstimmung gibt.

with open('abc.txt') as f: 
    a = ' ' 
    while(a): 
     a = f.readline() 
     l = a.find(':abc_efg') #Gives a non-negative value when there is a match 
     if (l >= 0): 
      print f.readline() 
+0

Danke das funktioniert. – cmp

0

Verwenden Sie die folgende regex erstens ist es effizient und zweitens die str Methoden außer Kontrolle verwendet, wenn für schweres Parsing.

import re 
pat = re.compile(r":(?P<x>.+?)\s\(\s+:\s(?P<y>.+?)\s\)") 
with open(somefile) as fr: 
    match = pat.search(fr.read()) 
    print(match.groupdict()) 


Out[111]: {'x': 'abc_efg', 'y': 'xxyyzz-x1y1-z1z2-z3z4'} 

die Regex in mehrere Zeilen brechen es klar zu sehen.