为什么我输出带空行的csv文件

时间:2016-07-28 11:56:37

标签: python python-2.7 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文件?

3 个答案:

答案 0 :(得分:2)

handler文件中的行末尾有换行符,您将其写入输出文件。

在拆分行之前通过剥离删除该换行符:

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

您可能希望避免重新发明CSV读取和写入轮子; Python附带了优秀的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()次调用,以避免在写入时添加一个。

答案 1 :(得分:1)

只需跳过空行。

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

答案 2 :(得分:0)

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

替换代码的第一行。