2016-03-24 7 views
0

Ich habe eine .csv-Datei und ich versuche, einige Zeilen/Zeilen, die keine verwendbaren Informationen haben zu löschen. Ich möchte Zeilen löschen, die in einer bestimmten Spalte keinen Wert haben. Ich bin etwas neu in der Programmierung und ich konnte keinen Weg finden, dies zu tun. Ist das möglich?Zeile löschen, von einem .csv, wenn bestimmte Spalte keinen Wert Python hat

Ich habe versucht, eine Zeile zu löschen, wenn sie keine bestimmte Nummer enthielt, aber das ging nicht so gut.

f = open('C:myfile.csv', 'rb') 
lines = f.readlines() 
f.close() 

filename = 'myfile.csv' 

f = open(filename, 'wb') 
for line in lines: 
    if line != "1": 
     f.write(line) 

f.close() 

sind hier einige Beispielzeilen:

0,593 0,250984 -20,523384 -25,406271 
0,594 0,250984   
0,595 0,250984   
0,596 0,250984   
0,597 0,250984 -15,793088 -21,286336 
0,598 0,250984   
0,599 0,908811   
0,6  0,893612   
0,601 0,784814 -12,130922 -11,825742 
0,602 0,909238   
0,603 0,25309  
0,604 0,38435  
0,605 0,602954 -8,316167 -3,43328 
0,606 0,642628   
0,607 0,39201  
0,608 0,384289   
0,609 0,251656 -11,825742 -5,874723 

Deshalb möchte ich die Zeilen löschen, wenn es keine Nummer in der dritten und vierten Spalte ist.

+1

Haben Sie versucht, dies noch zu programmieren? Können Sie Ihren Code teilen und erklären, was derzeit nicht für Sie funktioniert? – idjaw

+0

können Sie uns einige Beispielzeilen zeigen? Hast du deine Frage mit Python, irgendeinem Beispiel-Python-Code und/oder Forschung markiert? –

+0

Bitte Code nicht in Kommentare eingeben - bearbeiten Sie Ihre Frage und fügen Sie sie hinzu. – martineau

Antwort

1

Sie können Pythons Bibliothek csv verwenden, um Ihnen dabei zu helfen. Ihre Daten werden Tabulator getrennt werden, die als solche das folgende Skript funktionieren sollte:

import csv 

with open('input.csv', 'rb') as f_input, open('output.csv', 'wb') as f_output: 
    csv_output = csv.writer(f_output, delimiter = '\t') 

    for row in csv.reader(f_input, delimiter = '\t'): 
     if len(row[2]) and len(row[3]): 
      csv_output.writerow(row) 

Geben Sie eine output.csv Datei enthält:

0,593 0,250984 -20,523384 -25,406271 
0,597 0,250984 -15,793088 -21,286336 
0,601 0,784814 -12,130922 -11,825742 
0,605 0,602954 -8,316167 -3,43328 
0,609 0,251656 -11,825742 -5,874723 

Hinweis, jede Ihrer Zeilen erscheint 4 Spalten haben (Ihre Daten haben Registerkarten für diese fehlenden Einträge), aus diesem Grund ist es nicht genug, einfach die Länge ist 4 zu testen. Sie müssen den Inhalt der beiden Zellen testen.

+0

Danke, es funktioniert jetzt! –

0
import csv 

fn_in = 'test.csv' 
fn_out = 'outfile.csv' 

with open(fn_in, 'r') as inp, open(fn_out, 'w') as out: 
    writer = csv.writer(out) 
    for row in csv.reader(inp): 
     if len(row)==4: 
      writer.writerow(row) 
+0

Bitte erläutern Sie Ihren Code, um Ihre Antwort für andere hilfreicher zu machen. –