2017-08-17 1 views
0

J'utilise Python pour rechercher un grand fichier texte pour une certaine chaîne, en dessous de la chaîne se trouvent les données sur lesquelles je souhaite effectuer une analyse de données.Recherche d'un fichier texte pour une chaîne en 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() 

Dans la variable special_string, tout ce qui vient après info = peut varier, donc je suis en train de mettre un opérateur générique comme on le voit ci-dessus. La seule façon que je peux obtenir la fonction pour exécuter si est si je mets dans la chaîne exacte que je veux rechercher, y compris tout ce qui suit le signe égal comme suit:

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

Comment puis-je attribuer un opérateur générique à la reste de la chaîne pour rendre ma fonction plus robuste?

+0

Utilisez une regex. '*' ne fonctionne pas dans les opérations de chaîne Python. – dawg

Répondre

1

Si votre chaîne spéciale toujours se produit au début d'une ligne, vous pouvez utiliser le chèque ci-dessous (où special_stringne le fait pas ont le * à la fin):

line.startswith(special_string) 

Sinon, veuillez regarder le module re in the standard library pour travailler avec des expressions régulières.

+0

Cela a fonctionné le mieux pour cette situation, car il est toujours au début de la ligne. Pour le rendre plus robuste, mais j'ai besoin de comprendre re. –

+0

Si vous travaillez beaucoup avec des chaînes et des expressions régulières ... J'ai entendu beaucoup de bonnes choses à propos de ce module ... et cette page a beaucoup de bons exemples pour commencer ... – motjuste

1

Avez-vous pensé à utiliser quelque chose comme ça? Sur la base de vos commentaires, je suppose que ce qui suit:

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]) 

qui renverrait:

more_stuff