Seite 1 von 1

.csv File Leerzeile am Ende

Verfasst: Freitag 17. Januar 2014, 18:41
von WurzelAusZwei
Hey,

ich bin python-Neuling und schreibe in meinem Programm in ein .csv-File:

Code: Alles auswählen

with open('results.csv', 'w') as file:
    for text, count in results:
      file.write("%s\t%s\r\n" % (text, count))
Das funktioniert alles bis auf die Leerzeile, die am Dateiende entsteht. Wie kann ich das vermeiden?

Liebe Grüße,
WurzelAusZwei

Re: .csv File Leerzeile am Ende

Verfasst: Freitag 17. Januar 2014, 18:49
von pillmuncher
Was könnte wohl \r\n bedeuten...?
edit: Sorry, hab die Schleife übersehen. Deswegen: was EyDu weiter unten gesagt hat.

Re: .csv File Leerzeile am Ende

Verfasst: Freitag 17. Januar 2014, 18:54
von EyDu
Hallo und willkommen im Forum!

Ganz einfach: du schreibst die letzte Zeile eben ohne einen Zeilenumbruch ;-) Du könntest zum Beispiel testen, ob es sich bei der aktuellen Zeile schon um die letzte handelt. Den Index zu jedem Eintrag erhältst du mittels enumerate-Funktion:

Code: Alles auswählen

for index, (text, count) in enumerate(results)
Du könntest aber auch, mittels Slicing, alles bis auf den letzten Eintrag schreiben. Für den letzten Eintrag fügst du dann noch eine extra write-Zeile nach der for-Schleife an (Hinweis: sie vorsichtig mit leeren Listen). Und wenn es nur wenige Daten sind, dann bietet sich vielleicht die join-Methode auf strings an:

Code: Alles auswählen

>>> "X".join(["a", "b", "c"])                                                                                                         
'aXbXc'
Oder die beste Lösung: du verwendest das bereits vorhandene csv-Modul, dann musst du dir um nichts mehr Sorgen machen.

Re: .csv File Leerzeile am Ende

Verfasst: Freitag 17. Januar 2014, 18:55
von BlackJack
Wobei ich mich frage was an der Zeile das Problem ist. Ich sehe eher Probleme wenn die letzte Zeile *nicht* mit einem Zeilenende abgeschlossen ist.

Für CSV-Dateien gibt es übrigens in der Standardbibliothek auch ein Modul. Heisst `csv`. :-)

Re: .csv File Leerzeile am Ende

Verfasst: Freitag 17. Januar 2014, 19:04
von WurzelAusZwei
EyDu hat geschrieben:Hallo und willkommen im Forum!

Ganz einfach: du schreibst die letzte Zeile eben ohne einen Zeilenumbruch ;-) Du könntest zum Beispiel testen, ob es sich bei der aktuellen Zeile schon um die letzte handelt. Den Index zu jedem Eintrag erhältst du mittels enumerate-Funktion:

Code: Alles auswählen

for index, (text, count) in enumerate(results)
Du könntest aber auch, mittels Slicing, alles bis auf den letzten Eintrag schreiben. Für den letzten Eintrag fügst du dann noch eine extra write-Zeile nach der for-Schleife an (Hinweis: sie vorsichtig mit leeren Listen). Und wenn es nur wenige Daten sind, dann bietet sich vielleicht die join-Methode auf strings an:

Code: Alles auswählen

>>> "X".join(["a", "b", "c"])                                                                                                         
'aXbXc'
Oder die beste Lösung: du verwendest das bereits vorhandene csv-Modul, dann musst du dir um nichts mehr Sorgen machen.
Hey,

alles klar, danke! :)