2016-11-08 3 views
-1

Ich bin sehr neu mit Python und ich muss das folgende lösen (von Hand oder durch Python): für ein Dataset, wobei jede Datei besteht aus undefinierten Gruppen von Linien einer unterschiedlichen Anzahl von Zahlen, gefolgt von einer Textzeile inkl. Daten und Zahlen (sorry, wenn der Satz machen Sinn nicht):Ausgewählte Verbindung von Linien

2, 

4, 

6, 

1, 

2, 

02-sep-2016, blah blah, blah, 83838338 

3, 

0, 

0, 

03-Aug-2000, blah, 300033 

Ich brauche die höchste Zahl oberhalb der Textzeile vor dem Text und dem Rest werden gelöscht werden:

6,02-sep-2016, blah blah, blah, 83838338 

3,03-Aug-2000, blah, 300033 

Ich kenne die max() Funktion, aber wie kann ich als allgemeine Regel für alle meine Dateien angeben, welche Zahlen enthalten sind, und wie kann ich einige Zahlen in eine int() umwandeln, ohne den Satz aufzunehmen? Ich versuchte eine if Anweisung mit len(line)<=3 und es funktioniert nicht.

Antwort

0

Sie können Ihre Eingabedatei mit for line in my_file: ... lesen. Wenn die Zeilen, die Sie verwenden möchten max auf immer das Format, das Sie beschrieben (eine Zahl, gefolgt von einem Komma und einem Wagenrücklauf) folgen, können Sie sie in einem Satz als Ganzzahlen speichern, indem Sie das Komma und \n mit einem Schnitt und dann transtoning das Ergebnis (dh mit int(line[:-2])). max gibt Ihnen dann das größte Element des Satzes, das Sie mit str() zurück in eine Zeichenfolge konvertieren können. Um zwischen diesen Zeilen und denen mit einem Datum zu unterscheiden, suchen Sie nach etwas, das Sie nur in Datumszeilen finden (d. H. Zeichen oder -).

0
from future.utils import isint 
data = ["02-sep-2016, blah blah, blah, 83838338",2, 4,6,1,2,"02-sep-2016, blah blah, blah, 83838338",3,0,0,"03-Aug-2000, blah, 300033"] 

vals=[] 
final_data = "%d,%s" 
formatted_rec = [] 
for each_val in data: 

    if not isint(each_val) and "-" in each_val: 
     if vals: 
      max_digit = max(vals) 
     else: 
     #If text happens to be the first element of data set, set max_digit to zero 
      max_digit = 0 
     vals=[] 
     formatted_rec.append(final_data %(max_digit, each_val)) 
    else: 
     vals.append(each_val) 

for each_rec in formatted_rec: 
    print each_rec 

Ausgang:

0,02-sep-2016, blah blah, blah, 83838338 
6,02-sep-2016, blah blah, blah, 83838338 
3,03-Aug-2000, blah, 300033