2017-12-22 3 views
0

Um den Kontext festzulegen, muss ich eine CSV-Datei gemäß meinen Anforderungen umwandeln, um eine transformierte CSV-Ausgabedatei zu erstellen.Wörterbuch aus einer CSV-Datei mit dem DictReader-Objekt

Für diese Problemstellung habe ich gelernt, dass ich eine DictReader von Python CSV verwenden muss. Nach der Umwandlung habe ich versucht, ein anderes Wörterbuch namens new_point zu erstellen, das in einer csv-Datei gespeichert werden muss.

Das Problem ist, scheint Wörterbuch-Generierung in meinem Code fehlerhaft, als wenn ich das Wörterbuch drucken, ist es weder eine Reihe von Wörterbüchern noch ein Wörterbuch.

with open(out_file, 'w') as f_out, open(in_file, 'r') as f_in: 
     out_colnames = ['duration', 'month', 'hour', 'day_of_week', 'user_type']   
     trip_writer = csv.DictWriter(f_out, fieldnames = out_colnames) 
     trip_writer.writeheader() 

     trip_reader = csv.DictReader(f_in) 

     # collect data from and process each row 
     for row in trip_reader: 
      # set up a dictionary to hold the values for the cleaned and trimmed 
      # data point 
      new_point = {} 
      ## TODO: use the helper functions to get the cleaned data from ## 
      ## the original data dictionaries.        ## 
      ## Note that the keys for the new_point dictionary should match ## 
      ## the column names set in the DictWriter object above.   ## 
      duration = duration_in_mins(row, city) 
      month,hour,day_of_week = time_of_trip(row, city) 
      user_type = type_of_user(row, city) 

      new_point['duration'] = duration 
      new_point['month'] = month 
      new_point['hour'] = hour 
      new_point['day_of_week'] = day_of_week 
      new_point['user_type'] = user_type 

      pprint(new_point) 

wenn ich drucken die type(new_point) i die Ausgabe bin immer wie unten

Class <Dict> 

wenn ich die new_point dict drucke ich die unten bin immer.

{'day_of_week': 'Thursday', 
'duration': 7.123116666666666, 
'hour': 22, 
'month': 3, 
'user_type': 'Registered'} 
{'day_of_week': 'Thursday', 
'duration': 9.792516666666668, 
'hour': 22, 
'month': 3, 
'user_type': 'Registered'} 
{'day_of_week': 'Thursday', 
'duration': 6.632983333333333, 
'hour': 22, 
'month': 3, 
'user_type': 'Registered'} 
{'day_of_week': 'Thursday', 
'duration': 7.4047, 
'hour': 22, 
'month': 3, 
'user_type': 'Registered'} 
{'day_of_week': 'Thursday', 
'duration': 13.014583333333333, 
'hour': 22, 
'month': 3, 
'user_type': 'Registered'} 
{'day_of_week': 'Thursday', 
'duration': 17.0552, 
'hour': 22, 
'month': 3, 
'user_type': 'Registered'} 
{'day_of_week': 'Thursday', 
'duration': 11.01165, 
'hour': 22, 
'month': 3, 
'user_type': 'Registered'} 
{'day_of_week': 'Thursday', 
'duration': 30.01175, 
'hour': 21, 
'month': 3, 
'user_type': 'Registered'} 

Kann jemand, der diesen Ansatz bereits verfolgt hat mir ein Wörterbuch aus einem DictReader Objekt zu schaffen helfen, dieses Problem zu lösen.

Wenn Sie diese Frage sehr naiv finden, meine aufrichtige Entschuldigung. Ich bin völlig neu in Python. Ich habe versucht, die Dokumente zu lesen, aber ich habe das Konzept nicht verstanden. Ich konnte nirgendwo eine detaillierte Erklärung finden.

+0

"Wenn ich das Wörterbuch drucke, ist es weder ein Array von Wörterbüchern noch ein Wörterbuch" Können Sie diese Aussage erklären? Es * sieht * wie ein Wörterbuch in der Ausgabe aus, die Sie gezeigt haben. – larsks

+0

@larks Ich bin mir nicht sicher :) Es sieht aus wie ein Wörterbuch, aber wenn ich mit der For-Schleife iteriere, funktioniert es nicht wie im Falle von dict. – dataEnthusiast

+0

Direkt nach der 'pprint'-Zeile, wie wäre es mit einer Zeile, die' trip_writer.writerow (new_point) 'sagt? –

Antwort

1

Von dem, was ich sah, new_point sieht gut aus: es ist ein Wörterbuch mit den Schlüsseln, die die gleichen wie Ihre Spaltenüberschriften sind. Ich sehe jedoch keine Anweisung, die in die Ausgabe schreibt. Wie wäre es mit dem Schreiben Ihres Wörterbuchs, nachdem Sie es erstellt haben?

 new_point['duration'] = duration 
     new_point['month'] = month 
     new_point['hour'] = hour 
     new_point['day_of_week'] = day_of_week 
     new_point['user_type'] = user_type 
     trip_writer.writerow(new_point) # Write to the file 
Verwandte Themen