2016-07-30 14 views
0

zu wählen Ich bin derzeit ein Anfänger in der Programmierung und sehr neu in Python-Codierung.Benutzereingaben von arcGis verwenden, um bestimmte csv Spalte

Ich wollte eigentlich CSV-Datei neu zu schreiben (Lese csv und es an einem anderen csv speichern)

Was ich werde fragen Sie ist wie eine bestimmte CSV-Spalte von arcgis Benutzereingabe zu lesen.

Ich verwende "field" Datentypen und "multivalues" für die Eingabe, so dass ich wählen kann, welche Spalte ich anzeigen möchte.

Zum Beispiel, ich habe diese csv:

key, province, population, area 
    A1, provA, 100, 20 
    B1, provB, 200, 10 
    C1, provC, 50, 30 

nun vom Eingang wählen i nur Schlüssel und Bereich für die Spalte, die ich benutze:

GetParameterAsText(0) 

dann verwende ich diesen Code:

headers = arcpy.GetParameterAsText(0) 
    newhead = headers.replace("'", "") 
    headersList = newhead.split(";") 
    arcpy.AddMessage(headersList) 

Ich habe dieses Ergebnis (headersList):

[u'key', u'area'] 

The Problem beginnt, wenn ich, dass bestimmte Spalte aus dem obigen Ergebnis lesen möchten:

data = [] 
    with csvdata as csvfile: 
     reader = csv.DictReader(csvfile, delimiter=",") 
     for row in reader: 
      try: 
       new_row = [headersList] <--------------- This One 
       data.append(new_row) 
      except IndexError as e: 
       print e 
       pass 

     with open(csvout, "w+") as to_file: 
      writer = csv.writer(to_file, delimiter=",") 
      for new_row in data: 
      writer.writerow(new_row) 

ich new_row machen möchte dies gerne (erhalten sie von headersList):

new_row = [row['key'], row['area']] 

Aber ich weiß nur nicht, wie, kann jemand helfen?

+0

Angenommen, 'headersList' ist' [u'key ', u'area'] ', was ist mit' new_row = [row [k] für k in headersList] '(Dies wird Listenverstehen genannt) – jedwards

+0

wow, I kann das tun? lass mich es versuchen –

+0

Das funktioniert super !, Ich habe ein paar Codes geändert, um mein Ergebnis zu bekommen, danke Sir ... Jetzt weiß ich, dass es etwas namens Listen Verständnis –

Antwort

1

Von @jedwards Kommentar ist die Antwort wie folgt aus:

data = [] 
with csvdata as csvfile: 
    reader = csv.DictReader(csvfile, delimiter=",") 
    for row in reader: 
     try: 
      new_row = [row[k] for k in headersList] 
      data.append(new_row) 
     except IndexError as e: 
      print e 
      pass 

    with open(csvout, "wb") as to_file: 
     writer = csv.writer(to_file, delimiter=",") 
     writer.writerow(headersList) 
     for new_row in data: 
      writer.writerow(new_row) 

Nochmals vielen Dank!