如何使用open()修复错误行中的追加

时间:2017-05-06 16:11:10

标签: python-2.7 csv

我有一个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  |

我怎样才能做对?谢谢!

1 个答案:

答案 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'])