2017-06-13 2 views
0

Ich versuche, Datensätze als Listen unterschiedlicher Länge zu analysieren. Ich rufe Zeilen (Zeilen) meines Datensatzes nacheinander an, um von meiner Funktion analysiert zu werden. Ich möchte, dass die Funktion unabhängig von der Länge der Liste weiterhin ordnungsgemäß ausgeführt wird.F: Python3 - Wenn Statements zum Ändern der Listenlänge

Mein Code:

f = open('DataSet.txt') 
for line in iter(f): 

remove_blanks = [''] 
entries = line.split() 
''.join([i for i in entries if i not in remove_blanks]) 
trash = (entries[0], entries[1]) 
time = int(entries[2]) 
column = [int(v) for v in entries[3:]] 


def myFun(): 
    print(entries) 
    print_string = '' 
    if column[0] == 100: 
     if column[1] >= 250 and column[2] == 300: 
      if len(column) >= 9: 
       digit = [chr(x) for x in column[4:9]] 
       print_string = ('code: ' + ''.join(str(digit[l]) for l in range(5)) + ' ') 
      if len(column) >= 13: 
       optional_digit = [chr(d) for d in column[9:13]] 
       for m in range(0, 4): 
        print_string += 'Optional Field: ' + optional_digit[m] + '' 
      else: 
       print_string += 'No Optional Field ' 
     pass 
    pass 
    print(print_string) 
    print('') 


myFun() 

f.close() 

Was geschieht, ist, wenn die Länge einer Linie meiner Daten nicht lang genug ist (dh die Liste an column[6] endet), habe ich den Fehler:

line 17, in function 
    print('Code: ' + digit[l]) 
IndexError: list index out of range 

Ich möchte, dass es weiterhin Code: #number #number #number #number Druck und lassen Sie nicht vorhandene Spalten als Leerzeichen, wenn es gedruckt wird, so dass eine Zeile als Code: ABC9 und der nächste Druck als Code: AB drucken, wenn es unterschiedliche Listenlängen gibt.

Bitte helfen! :)

Antwort

1

Nun, so stellen Sie sicher, dass Sie nicht über eine Liste Looping länger als verfügbar:

print_string = 'code: ' + ''.join(str(digit[l]) for l in range(min(5, len(digit)))) + ' ' 

oder besser:

print_string = "code {} ".format("".join(str(dig) for dig in digit[:5])) 

Obwohl ich das Gefühl haben Sie über sind kompliziert dies.

+0

Vielen Dank! Ich lerne jetzt gerade zu programmieren, also bin ich mir sicher, dass das zu kompliziert ist, aber es scheint, dass deine Lösung funktioniert hat. Ich musste nur die len (column) Bedingung für die if-Anweisung ändern und den Code eingeben. Danke – DRauch