2011-01-29 5 views
0

J'ai une question que je veux lire un fichier, rechercher n'importe quelle ligne qui a l'ID de session (e.i. 12345), si apparié alors imprimez toutes les lignes après cela jusqu'à rencontrer la nouvelle ligne. après cela, comment puis-je associer toutes ces lignes à l'ID de session si j'ai besoin d'analyser ces lignes. Et je veux le faire en Python.comment analyser le texte

Merci

+0

"imprime toutes les lignes après cela jusqu'à rencontrer la nouvelle ligne" - il semblera que ce ne sera que 1 ligne. Soyez plus précis s'il vous plaît. Votre question est trop générale. – Elalfer

+0

C'est assez simple à écrire, mais les détails seront dominés par votre format de fichier - qu'est-ce que c'est? En outre, "imprimer toutes les lignes ... jusqu'à rencontrer une nouvelle ligne" n'a pas de sens, car toutes les lignes se terminent par un saut de ligne. Qu'avez-vous vraiment voulu dire? – payne

+0

Un peu hors sujet, mais comment avez-vous obtenu cet ID utilisateur. "user589837" – Neo

Répondre

3

cela répond à la première partie de votre question:

with open('myfile.txt') as f: 
    for line in f: 
     if '12456' in line: 
      print line 

Je ne comprenais pas ce que vous demandiez. pouvez-vous traduire: "comment puis-je associer toutes ces lignes à l'ID de session si j'ai besoin d'analyser ces lignes"?

+0

remercie Corey. Je pense que je ne suis pas clair dans ma question. mon fichier contiendra des likes avec le numéro comme 123456 et suivi par d'autres lignes comme: 123 \ nb: 234 \ n et newline. Je veux si trouvé 123456, puis imprimer toutes les lignes après cela jusqu'à frapper la ligne vide et 123456 sera heureux plusieurs fois dans le fichier, donc je veux imprimer tout le temps que la session 123456 se produit avec toutes les lignes après cela. – pianoman1873

2

Je vais supposer que votre fichier journal est formaté comme

session 321: abc de 
    567 89 abd ec 

session 12345: ghi lm 
    763 98 dba ce 

et que ce que vous voulez faire est de trouver la session appropriée et toutes les lignes suivantes jusqu'à ce que vous voyez une ligne vide.

import collections 
import re 

sessionData = collections.defaultdict(list) 
lookfor = [12345, 13981] 
newSession = re.compile(r'session (\d+):') 

with open('my_log_file.txt', 'r') as inf: 
    session = None 
    for ln in inf: 
     ln = ln.rstrip() 
     if len(ln): 
      match = newSession.match(ln) 
      if match: 
       s = int(match.group(0)) 
       if s in lookfor: 
        session = s 
      if session: 
       print ln 
       sessionData[session].append(ln) 
     else: 
      session = None 

sessionData est maintenant un dict de clé de session; pour chaque session, il contient une liste de toutes les lignes connexes. En utilisant les exemples de données ci-dessus, sessionData ressemblera à

{ 12345: ["session 12345: ghi lm", " 763 98 dba ce"] } 
+0

merci Hugh. S'il y a beaucoup de lignes avec le même ID de session comme 12345. Va-t-il afficher toutes les lignes ou seulement la 1ère fois. Je veux afficher toutes les lignes avec cet ID de session car cette ligne d'ID de session apparaîtra plusieurs fois avec un horodatage différent dans le fichier. Merci beaucoup. – pianoman1873

+0

@ user589837: il va tous les rassembler, en les ajoutant à la liste référencée par sessionData [sessionID]. –

Questions connexes