2016-04-22 6 views
0

Ich habe Probleme beim Entwerfen eines Skripts, das bestimmte Zeilen und Spalten aus einer CSV-Datei löschen wird. Hier ist mein Skript so weit:TypeError in CSV Bereinigung Skript

import csv 
with open ("E:\\CSULB Grad\\2016 Spring\\Geog 588\\Project\\ACS_14_5YR_B02001_Copy.csv","rb") as csvfile: 
    reader=csv.reader(csvfile) 
with open ("E:\\CSULB Grad\\2016 Spring\\Geog 588\\Project\\ACS_14_5YR_B02001_Copy.csv","ab+") as csvfile2: 
    writer=csv.writer(csvfile2) 
    for row in csvfile2: 
     del row['HD02_VD01'] 
     writer.writerow(row) 

Hier ist der Fehler, den ich Zurückverfolgungs habe immer:

Traceback (most recent call last): 
    File "C:\Python27\ArcGIS10.3\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 326, in RunScript 
    exec codeObject in __main__.__dict__ 
File "E:\CSULB Grad\2016 Spring\Geog 588\Project\Script2.py", line 7, in <module> 
    del row['HD02_VD01'] 
TypeError: 'str' object does not support item deletion 

Antwort

1

Sie können eine CSV-Datei an Ort und Stelle ändern, wie Sie darüber iterieren. Erwägen Sie, eine neue CSV-Datei zu erstellen, die nur die Spalten schreibt, die Sie für jede Zeile in der Originaldatei benötigen.

Zum Beispiel:

with open(path,"wb") as csvfile: 
     writer = csv.DictWriter(csvfile, fieldnames = fieldNames) 
     for row in csvfile2: 
      writer.writerow({"Col1":row['...'],"Col2":row['...']}) 
+0

Können Sie mir sagen, was Sie von d1 bedeuten in in ({ "Col1": d1, "Col2": d2})? Mein Kurs hat uns nicht gelehrt, wie man mit Wörterbüchern arbeitet, so wie es hier aussieht. (": \\ CSULB Grad \\ 2016 Frühling \\ Geog 588 \\ Projekt \\ ACS_14_5YR_B02001_Copy.csv E", "a") als csvfile sein import csv mit offenem Der Code habe ich versucht, endet: writer = csv.DictWriter (csvfile, Feldnamen = Feldnamen) writer.writerow ({'GEO.id': 'GEOID', 'GEO.id2': 'GEOID_2', 'GEO.display-label': 'CEN_TRACT' 'HD01_VD01': 'POP_TOT'}) – daven520

+0

und ich diesen Traceback Traceback (jüngste Aufforderung zuletzt) ​​erhalten: Datei „C: \ Python27 \ ArcGIS10.3 \ Lib \ site-packages \ PythonWin \ pywin \ Framework \ scriptutils.py ", Zeile 326, in RunScript exec codeObject in __main __.__ dict__ Datei" E: \ CSULB Grad \ 2016 Spring \ Geog 588 \ Project \ Script4.py ", Zeile 4, in writer.writerow ({'GEO.id': 'GEOID', 'GEO.id2': 'GEOID_2', 'GEO.display-label': 'CEN_TRACT', 'HD01_VD01': 'POP_TOT'}) ValueError: dict enthält Felder nicht in Feldnamen: 'GEO.id2', 'GEO.id', 'HD01_VD01', 'GEO.display-label' – daven520

+0

Bitte beachten die bearbeitete Antwort. d1/d2 waren nur willkürliche Variablennamen für Daten, auf die gesetzt werden soll. – Phillip