我有一个CSV
文件有两列,第一行有标题。它看起来像:
95% | 99%
|
我尝试使用:
with open('XXXXX','a') as f:
writer = csv.writer(f)
writer.writerow([a, b])
在我运行此代码两次后,我倾向于得到如下结果:
95% | 99%
a | b
a | b
但我的输出是
95% | 99%a | b
a | b |
我怎样才能做对?谢谢!
答案 0 :(得分:1)
您的输出文件并不以换行符结尾,因此writer
只会附加到最后一条未终止的行的末尾。如果你知道这是一般的情况,并且想在写作之前添加换行符,你可以这样做:
import csv
with open('blah.csv','a') as f:
# using \r\n since that's the default line terminator
f.write('\r\n');
writer = csv.writer(f)
writer.writerow(['a', 'b'])
另一种选择是读取文件末尾以检查是否需要附加换行符,并且只有在文件末尾没有行终止符时才这样做:
import csv
unterminated = False
try:
with open('blah.csv','rb') as f:
f.seek(-2, 2)
if f.read(2) != '\r\n':
unterminated = True
except IOError:
pass
with open('blah.csv','ab') as f:
if unterminated:
f.write('\r\n');
writer = csv.writer(f)
writer.writerow(['a', 'b'])