2016-05-23 11 views
3

Ich benutze Python 2.7.6. Ich möchte meine Liste von Objekten in das CSV-Format konvertieren. Ich habe eine Liste von cdr-Objekt, dieses Objekt enthält einige Zeichenfolge, int und datatime Objekt.Liste von Datenobjekt in CSV konvertieren

Aber ich bekomme eine leere csv. Danke für die Hilfe.

+0

https://docs.python.org/3/library/pickle.html ist der Weg zu gehen oder Sie müssen durchlaufen die Attribute und dann in CSV schreiben. –

+0

Haben Sie versucht einfache einfache Liste anstelle von Cdr-Klasse zuerst? Die __iter__ Funktion ist hier falsch (missbrauche iter()), wenn sie tatsächlich ausgeführt wird, solltest du eine Ausnahme haben, anstelle von stummem Leerzeichen – tdihp

+1

'iter()' Funktion gibt ein iterierbares Objekt zurück. Sie müssen '.next()' verwenden, um darüber zu iterieren oder verwenden Sie eine 'list()' -Funktion, um es in eine Liste zu konvertieren ... wie 'wr.writerow (list (cdr))' –

Antwort

4

iter integrierte Funktion erwartet eine Auflistung als Argument, also Attribute in einer Listenform übergeben. Dann benutze den @ Shankar Vorschlag.

class Cdr(): 

    def __iter__(self): 
     return iter([self.name, self.my_value, self.my_datetime]) 


#from another class 
with open(self.file_name, 'wb') as csv_file: 
    wr = csv.writer(csv_file, delimiter=',') 
    for cdr in cdr_list: 
     wr.writerow(list(cdr)) # @Shankar suggestion 

aus Python Hilfe docs:

iter (...)
iter (Sammlung) -> Iterator
iter (aufrufbar, Sentinel) -> Iterator
Holen Sie sich einen Iterator aus ein Objekt. In der ersten Form muss das Argument seinen eigenen Iterator liefern oder eine Sequenz sein.
In der zweiten Form wird die Callable aufgerufen, bis sie das Sentinel zurückgibt.

+1

Die 'str (self.my_datetime)' ist unnötig, da die 'datetime' Klasse eine' __str __() 'Methode hat, die automatisch aufgerufen wird. – martineau

+0

Gut zu wissen, @martineau xD – slackmart