2016-07-28 2 views
0

와 I 출력 csv 파일이 내 코드입니다 :왜 빈 행

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)) 

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 
---------- 

출력 내가 어떻게 출력하는 빈 행이없는 CSV 파일?

답변

2

파일의 handler 파일의 끝에는 출력 파일에 쓰는 끝에 끝에 개행 문자가 있습니다. 당신이 선 분할하기 전에

제거하여 해당 줄 바꿈을 제거

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

당신은 CSV 읽기 및 쓰기 바퀴를 다시 발명하지 않도록 할 수 있습니다를, 파이썬은 줄을 줄 바꿈을 제거하고 분할을 포함하여 당신을 위해 모든 일을 할 수있는 우수한 csv module와 함께 제공 :

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]) 

가 나는 또한 작성할 때 하나를 추가하는 것을 방지하기 위해 1에서 enumerate() 통화를 시작했다.

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

코드의 첫 줄을 바꾸십시오.

1

그냥 빈 줄을 건너 뛰십시오.

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