2016-08-04 18 views
1

Ich habe ein Wörterbuch:ein Wörterbuch in eine CSV-Datei für eine andere Wiederverwendung Schreiben

inputdict = {key1: [value1,value2..], key2: [value1,value2..], key3: [value1,value2..]} 

Ich möchte die Daten in eine Datei dict.csv, in diesem Stil schreiben:

key1: [value11,value12,..] 
key2: [value1,value22,..] 
key3: [value31,value32,..] 

I schrieb:

import csv 
with open(ouputfile, 'wb') as csv_file: 
     writer = csv.writer(csv_file) 
     for key, value in inputdict.items(): 
      writer.writerow([key: value]) 

Aber ich habe jetzt einen Fehler:

TypeError: a bytes-like object is required, not 'str' 

Wenn ich eine Datei wie diese schreiben kann, möchte ich sie auch in ein neues Wörterbuch zurücklesen.

Das Wörterbuch enthält Zeichenfolgen in Schlüsseln und Listen von Ganzzahlen. Ich möchte das Wörterbuch von anderen Skripten wiederverwenden, indem ich aus der CSV-Datei lese.

Antwort

1

Schreiben Sie die Datei mit w anstelle von wb. Und beim Zurücklesen im Einsatz r statt rb.

Dann können Sie stattdessen tun:

with open('/path/to/input_dict.csv','w') as fou: 
    writer = csv.writer(fou) 
    for k,v in inputdict.iteritems(): 
     writer.writerow(["{'%s':%s}" % (k,v)]) 

Und es zurück in lesen:

import ast 
with open('/path/to/input_dict.csv','r') as fin: 
    for line in fin: 
     ast.literal_eval(ast.literal_eval(line)) 

aber Sie sollten in der Lage sein zu tun, was Sie mit pickle einfacher wollen:

import pickle 
with open('/path/to/input.csv', 'wb') as fou: 
    pickle.dump(inputdict,fou) 

Und zu lesen:

+0

danke für die Antwort, habe ich die erste Option ausprobiert, weil ich die Ergebnisse in einer lesbaren Datei wie CSV geben muss, um von anderen Programmen verwendet zu werden. Ist es auch für Gurken möglich? –

+0

Sie sind herzlich willkommen. Nein, das ist mit Gurken nicht möglich. – bernie