2009-07-13 6 views
1

Je suis en train d'écrire un script pythonRejoindre enregistrements sur Fichier de plusieurs lignes en fonction de critères

qui prend des données d'enregistrement comme celui-ci

6xxxxxxxx 
7xxxxxxxx 
6xxxxxxxx 
7xxxxxxxx 
7xxxxxxxx 
6xxxxxxxx 
6xxxxxxxx 
6xxxxxxxx 
7xxxxxxxx 
7xxxxxxxx 
7xxxxxxxx 

et effectue la logique suivante

newline = "" 
read in a record 
    if the record starts with a 6 and newline = '' 
     newline = record 
    if the records starts with a 7 
     newline = newline + record 
    if the record starts with a 6 and newline != '' 
     print newline 
     newline = record 

Alors il devrait imprimer comme ceci:

6xxxxxx 7xxxxxxxx 
6xxxxxx 7xxxxxxxx 7xxxxxxx 7xxxxxxx 
6xxxxxx 
6xxxxxx 
etc.. 

Voici mon code:

han1 = open("file","r") 

newline = "" 
for i in han1: 
     if i[0] == "6" and newline == "": 
       newline = i 
     elif i[0] == "7": 
       newline = newline + i 
     elif i[0] == "6" and newline != "": 
       print newline 
       newline = "" 
       newline = i 


han1.close() 

Quand je lance mon script la sortie semble intacte. Où pensez-vous que je me trompe? Est-ce parce que la variable de nouvelle ligne ne stocke pas de valeurs entre les itérations de la boucle? Toute orientation serait appréciée.

Répondre

0

Vous pouvez simplifier cela en ajoutant simplement une nouvelle ligne pour un enregistrement qui commence par 6, et ne pas en ajouter un s'il ne l'est pas. OK, cela crée une ligne vide d'abord dans le fichier, et ne peut pas terminer le fichier avec un retour à la ligne. Pourtant, c'est facile à réparer.

Ou une solution qui doens't ont ce problème et est plus proche de la vôtre:

newline = '' 
for line in open('infile'): 
    if line[0] == '6': 
     if newline: 
      print newline 
      newline = '' 
    newline += ' ' + line.strip() 
if newline: 
    print newline 

fonctionne également, mais il est un peu plus longue. Cela dit, je pense que votre problème principal est que vous ne dépouillez pas les enregistrements, vous préservez ainsi le saut de ligne.

0

Aucune branche de votre instruction if ne termine avec newline défini sur "". Par conséquent, la première branche n'évaluera jamais car newline n'est jamais "" sauf dans le tout premier cas.

0

si vous produisez est pas en GB,

data=open("file").read().split() 
a = [n for n,l in enumerate(data) if l.startswith("6") ]   
for i,j in enumerate(a): 
    if i+1 == len(a): 
     r=data[a[i]:] 
    else: 
     r=data[a[i]:a[i+1]] 
    print ' '.join(r) 
Questions connexes