我正在生成和解析CSV文件,我注意到一些奇怪的东西。
生成CSV时,最后总会有一个空行,这会在随后解析它时引起问题。
我要生成的代码如下:
with open(file, 'wb') as fp:
a = csv.writer(fp, delimiter=",", quoting=csv.QUOTE_NONE, quotechar='')
a.writerow(["Id", "Builing", "Age", "Gender"])
results = get_results()
for val in results:
if any(val):
a.writerow(val)
它不会通过命令行显示,但我确实在我的IDE /文本编辑器中看到它
有谁知道为什么会这样做?
这可能是空白吗?
答案 0 :(得分:1)
问题是线路终结器吗?它可以像改变一行一样简单:
a = csv.writer(fp, delimiter=",", quoting=csv.QUOTE_NONE, quotechar='', lineterminator='\n')
我怀疑这是因为我知道csv.writer默认使用回车符+换行符(“\ r \ n”)作为行终止符。您用来读取文件的程序可能只需要一个换行符(“\ n”)。这在* nix和Windows之间来回切换文件时很常见。
如果这不起作用,那么用于读取文件的程序似乎期望最后一行的 no 行终止符,我不确定csv模块是否支持。为此,您可以将csv写入StringIO,“strip()”然后将其写入您的文件。
此外,由于您没有引用任何内容,是否有理由使用csv?为什么不:
with open(file, 'wb') as fp:
fp.write("\n".join( [ ",".join([ field for field in record ]) for record in get_results()]))