2016-07-28 7 views
0

Dies ist mein Code:Warum ich Ausgabe CSV-Datei mit einer leeren Zeile

with open("testoffset.csv") as handler: 
    f = open('output_file2.csv', 'w+') 
    f.write('X,Y,value\n') 
    for r,l in enumerate(handler): 
     for col, e in enumerate(l.split(',')): 
      f.write('{0},{1},{2}\n'.format(r+1,col+1,e)) 

Diese gibt

X Y value 
1 1 1 
1 2 2 
1 3 3 
---------- 
blank row 
---------- 
2 1 2 
2 2 2 
2 3 2 
---------- 
blank row 
---------- 
3 1 1 
3 2 2 
3 3 3 
---------- 
blank row 
---------- 

Wie kann ich Ausgang eine CSV-Datei ohne diese leeren Zeilen?

Antwort

2

Ihre Zeilen aus der Datei handler haben am Ende einen Zeilenumbruch, den Sie in Ihre Ausgabedatei schreiben.

dass Newline entfernen durch Strippen, bevor Sie die Linie geteilt:

for col, e in enumerate(l.rstrip('\n').split(',')): 

Möglicherweise möchten Sie neu zu erfinden, die CSV Lesen und Schreiben Räder vermeiden; Python kommt mit den ausgezeichneten csv module, die für Sie all diese Arbeit tun kann, einschließlich dem Newline entfernen und Aufspalten der Linien:

import csv 

with open("testoffset.csv", 'rb') as handler, open('output_file2.csv', 'wb') as output: 
    reader = csv.reader(handler) 
    writer = csv.writer(output) 
    writer.writerow(['X', 'Y', 'value']) 
    for rownum, row in enumerate(reader, 1): 
     for colnum, col in enumerate(row, 1): 
      writer.writerow([rownum, colnum, col]) 

ich die enumerate() Anrufe bei 1 auch begann man hinzufügen, um zu vermeiden, wenn das Schreiben.

0
with open("testoffset.csv",'wb') as handler: 

Ersetzen Sie die erste Zeile Ihres Codes.

1

Leere Zeilen einfach überspringen.

... 
for r,l in enumerate(handler): 
    if not l.startswith('\n'): #or if l[0] != '\n': 
     for col, e in enumerate(l.split(',')): 
      ... 
Verwandte Themen