2017-08-17 3 views
0

Ich verwende Python, um eine große Textdatei für eine bestimmte Zeichenfolge zu suchen, unterhalb der Zeichenfolge sind die Daten, die ich in Datenanalyse durchführen möchte.Suche Textdatei für Zeichenfolge in Python

def my_function(filename, variable2, variable3, variable4): 
array1 = [] 

with open(filename) as a: 
    special_string = str('info  %d  info =*' %variable3) 
    for line in a: 
     if special_string == array1: 
      array1 = [next(a) for i in range(9)] 
      line = next(a)  
      break 
     elif special_string != c: 
      c = line.strip() 

In dem special_string Variable, was nach info = kommt variieren kann, so versuche ich, einen Wildcard Operator zu setzen, wie oben zu sehen. Die einzige Art, wie ich die Funktion bekommen kann, obwohl laufen ist, wenn ich in der genauen Zeichenfolge habe ich für gesucht werden soll, einschließlich alles nach dem Gleichheitszeichen wie folgt:

special_string = str('info   %d  info = more_stuff' %variable3) 

Wie kann ich einen Wildcard Operator die zuweisen Rest der Saite, um meine Funktion robuster zu machen?

+0

Verwenden Sie eine Regex. '*' funktioniert nicht in Python-String-Operationen. – dawg

Antwort

1

Wenn Ihre speziellen Zeichenfolge immer am Anfang einer Zeile auftritt, dann können Sie verwenden die unter Kontrolle (wo special_stringnicht hat die * am Ende):

line.startswith(special_string) 

Andernfalls sehen Sie sich bitte die module re in the standard library für die Arbeit mit regulären Ausdrücken.

+0

Dies funktioniert am besten für diese Situation, da es immer am Anfang der Linie ist. Um es robuster zu machen, muss ich aber re. –

+0

Wenn Sie viel mit Strings und regulären Ausdrücken arbeiten ... Ich habe viele gute Dinge über dieses Modul gehört ... und diese Seite hat viele gute Beispiele, mit denen Sie anfangen können ... – motjuste

1

Haben Sie darüber nachgedacht, so etwas zu verwenden? Basierend auf Ihren Input, ich gehe davon aus das folgende:

variable3 = 100000 
special_string = str('info   %d  info = more_stuff' %variable3) 

import re 
pattern = re.compile('(info\s*\d+\s*info\s=)(.*)') 
output = pattern.findall(special_string) 
print(output[0][1]) 

Welche zurückkehren würde:

more_stuff 
Verwandte Themen