2016-04-09 8 views
1

Ich bin neu in Python und ich versuche, die CSV-Datei Datensätze durch den Abgleich bestimmter Zeichenfolgen zu reduzieren. Ich möchte die Zeilen des übereinstimmenden in eine neue CSV-Datei schreiben. HierSchreiben Sie übereinstimmende Zeilen in csvfile zu einer neuen CSV-Datei mit Python

ist ein Beispiel-Datensatz:

dataset screenshot

Was ich versuche zu tun Suche nach für bestimmte passende Keywords über alle Zeilen gehen (zB schreiben nur die Zeilen Haftbefehls enthalten, wie sein kann auf dem Bild) zu einer neuen CSV-Datei.

Hier ist mein Code für bisher:

import csv 
with open('test.csv', 'a') as myfile: 
     with open('train3.csv', 'rb') as csvfile: 
      spamreader = csv.reader(csvfile, delimiter=',') 
      for r in spamreader: 
       for field in row: 
        if field == "OTHER OFFENSES": 
         myfile.write(r) 

test.csv ist leer und train3 enthält alle Datensätze.

+0

Werfen Sie einen Blick auf https://docs.python.org/2/library/csv.html –

+1

Sie können oft eine Menge über das, was vor sich geht, lernen, indem Sie einfach einige "else" -Anweisungen hinzufügen. Zum Beispiel, nach 'if field ==" ANDERE OFFENSES ":', könnten Sie 'else: print (field)' oder 'else: print (r)' schreiben. Es kann offensichtlich werden, warum Ihr Vergleich fehlschlägt, sobald Sie die tatsächlichen Daten sehen. Z.B. nach jeder Reihe könnte ein Newline-Zeichen stehen, das den Vergleich durcheinander bringt (das war die Ursache des Problems, als das letzte Mal jemand danach gefragt hat und ich geantwortet habe). Anstelle von "if field ==" ANDERE OFFENSES "' könnten Sie versuchen, 'wenn" ANDERE OFFENSES "in Feld:' – jDo

+0

In Ihrem Dataset-Beispiel gibt es kein einzelnes Feld, das "ANDERE OFFENSES" 'entspricht. Sie würden also erwarten, dass die Ausgabedatei leer ist. – schwobaseggl

Antwort

0

Versuchen Sie, den folgenden Ansatz, es ist ein bisschen schwierig zu testen, wie Ihre Daten nicht kopieren kann/eingefügt:

import csv 

with open('test.csv', 'a', newline='') as f_outputcsv, open('train3.csv', 'r') as f_inputcsv: 
    csv_spamreader = csv.reader(f_inputcsv) 
    csv_writer = csv.writer(f_outputcsv) 

    for row in csv_spamreader: 
     for field in row: 
      if field == "WARRANT ARREST": 
       csv_writer.writerow(row) 
       break 

Dieser verwendet eine csv.writer Instanz ganze Reihen zurück in die Ausgabedatei zu schreiben.

+0

Danke Martin, das hat gut funktioniert! Ich musste nur das Argument ab zu a und rb zu r ändern! –

+0

Großartig, verwenden Sie Python 3? Wenn ja, wäre es besser als ''a', newline = ''' –

+0

Ja, ich arbeite mit Anaconda - Python 3.5. Danke noch einmal! –

0

Sie können oft eine Menge über das, was vor sich geht, lernen, indem Sie einfach einige Anweisungen hinzufügen. Zum Beispiel könnten Sie nach if field == "OTHER OFFENSES":else: print(field) oder else: print(r) schreiben. Es kann offensichtlich werden, warum Ihr Vergleich fehlschlägt, sobald Sie die tatsächlichen Daten sehen.

Es könnte auch ein Zeilenvorschub Zeichen nach jeder Zeile sein, die den Vergleich durcheinander bringt (das war die Ursache des Problems beim letzten Mal jemand fragte nach und ich antwortete). Vielleicht sieht Python OTHER OFFENSES\n, was nicht gleich OTHER OFFENCES ist. Um diese zu vergleichen, verwenden Sie einen weniger strengen Vergleich oder strip() das Feld.

Versuchen Sie, if field == "OTHER OFFENSES" durch if "OTHER OFFENSES" in field: zu ersetzen. Wenn Sie == tun, fragen Sie nach einer genauen Übereinstimmung, während something in something_else wird die gesamte Textzeile für something suchen.

Verwandte Themen