2017-09-05 3 views
2

Ich versuche, .csv-Datei zu erstellen.Python überspringt Zeile beim Drucken in CSV

Aus irgendeinem Grund überspringt es Zeile vor dem Drucken Eintrag.

Hier ist die Ausgabe

enter image description here

Aber hier ist, was ich brauche

enter image description here

Below-Code ist. Offenbar funktioniert if line != "": nicht

import csv 

#----------------------------------- 
def csv_writer(data,path): 
    """ 
    Write data to a CSV file path 
    """ 
    with open(path, "w") as csv_file: 
     writer = csv.writer(csv_file, delimiter=',') 
     for line in data: 
      if line != "": 
       writer.writerow(line) 

#----------------------------------- 
if __name__ == "__main__": 
    data = ["first_name,last_name,city".split(","), 
      "Tyrese,Hirthe,Strackeport".split(","), 
      "Jules,Dicki,Lake Nickolasville".split(","), 
      "Dedric,Medhurst,Stiedemannberg".split(",") 
      ] 
    path = "output.csv" 
    csv_writer(data,path) 

Antwort

3

Einige Python-Versionen (Windows) mit dem with open(path, "w") as csv_file: ein Problem haben. A spurious carriage return char is inserted, Erstellen einer Leerzeile nach jeder Zeile.

Sie müssen newline="" wie in der Dokumentation angegeben hinzufügen. Python 3:

with open(path, "w",newline="") as csv_file: 
    writer = csv.writer(csv_file, delimiter=',') 

Wie für Python 2:

with open(path, "wb") as csv_file: 
    writer = csv.writer(csv_file, delimiter=',') 

siehe auch:

(diesen letzten Python beachten Sie ver Windows-Versionen benötigen dies nicht mehr, aber die Dokumentation setzt dies fort.)

+0

Das Problem ist spezifisch für Windows und wird in der [Dokumentation] (https://docs.python.org/3/library/csv.html#id3) behandelt. – Aaron

2

Wenn Sie die Datei öffnen, müssen Sie das Schlüsselwort Argument newline mit einer leeren Zeichenfolge übergeben. Dies verhindert, dass die Zeilenumbrüche zwischen den Zeilen hinzugefügt werden. Ihre Funktion sollte sein:

def csv_writer(data,path): 
""" 
Write data to a CSV file path 
""" 
with open(path, "w", newline = '') as csv_file: 
    writer = csv.writer(csv_file, delimiter=',') 
    for line in data: 
     if line != "": 
      writer.writerow(line) 

Beachten Sie, dass dies nur ein Problem unter Windows ist.

Verwandte Themen