2016-12-18 3 views
0

Ich habe zehn CSV-Dateien mit Python erstellt. Jede CSV-Datei hat etwa 330K Linien (Zeilen), und jede Zeile wie folgt aussieht:Mehrere csv-Dateien nach bestimmten Kriterien mit Python verschmelzen

0.334,0.0232,0.00086,1.642e-05

[blank row]

0.334,0.0232,0.00086,1.742 E-05

[Leerzeile]

...

(ich bin nicht sicher, warum python nach jeder Zeile in einer leeren Zeile schreibt).

Ich versuche, 10 Dateien mit den Namen Parameters1, Parameters2 .... zusammenzuführen. Parameter 10, leere Zeile ausschließen und nur schreiben, wenn die zweite Spalte einen Wert größer als 0,1 enthält.

Wenn ich den obigen Code ausführen, bekomme ich unorderable Typen: str()> float().

und wenn ich stattdessen den gleichen Code ausführen, indem

Ändern
if(line[1])>0.1 

zu

if float(line[1])>0.1: 

I Valueerror erhalten: string nicht konvertieren konnte zu schweben: ''

Ich bin mir nicht sicher, warum das so ist. Ich habe '.' , aber es ist Teil einer Nummer, z. B. 0,334 oder 1,642e-05.

Vielen Dank für Ihre Hilfe!

+1

Das zweite * Zeichen * der Zeile ist ein Punkt; Sie teilen es nicht in Felder auf. Wenn Sie CSV verwenden, warum nicht 'csv' verwenden? – jonrsharpe

+0

@jonrsharpe, ich bin immer noch in der Lernphase für Python. Würdest du bitte klären, wie ich in Felder statt in Zeichen aufteilen kann? Danke für Ihre Hilfe. – DPdl

+0

Dann google "Python CSV" und fang an zu lesen! Das oben erwähnte eingebaute Modul wäre ein vernünftiger Ausgangspunkt. – jonrsharpe

Antwort

0

Bis Sie den Code mit dem Modul csv refaktorieren können, können Sie versuchen, line = line.strip().split(",") zu Ihrem Skript vor den Bedingungen hinzuzufügen, um sicherzustellen, dass Sie tatsächlich mit einem list arbeiten. Das folgende sollte eine anständige Illustration darstellen:

with open("C:\Anaconda3\Sr90NHPModelParameters\Parameters100.csv","a") as fout: 
    for num in range(1,11): 
     for line in open("C:\Anaconda3\Sr90NHPModelParameters\Parameters"+str(num)+".csv"): 
      line = line.strip().split(",") 
      if line[0] == '' or float(line[1]) < 0.1: 
       continue 
      else: 
       fout.write(",".join(line)+"\n") 

Ich hoffe, das hilft jetzt.

Verwandte Themen