【问题标题】:Generating CSV and blank line生成 CSV 和空行
【发布时间】:2015-10-07 21:27:54
【问题描述】:

我正在生成和解析 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/文本编辑器中看到它

有谁知道它为什么这样做?

可能是空格吗?

【问题讨论】:

  • 你确定“get_results()”的最后一行不是空行吗?
  • @grael 我很确定是的。我尝试了其他示例(不使用get_results()),但我仍然遇到同样的问题
  • 如果您有任何方法可以提供您正在使用的 csv 文件,我不介意在我这边运行它。
  • @idjaw 是结束文件,而不是读取 CSV
  • 这真的很奇怪,因为每个示例似乎都这样做。我在我拥有的每个 IDE/文本编辑器中都看到了额外的一行,但是当我 vim file.csv 时,我看不到空格

标签: python python-2.7 csv


【解决方案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()]))

【讨论】:

  • 只是一点点,'\n' 是换行,'\r' 是回车。否则我认为你是 100% 正确的。
  • 其实你改的部分已经是正确的了,我说的是'\n'本身。
  • 嘘。重新固定。 (我希望大声笑)
猜你喜欢
  • 2021-12-04
  • 1970-01-01
  • 2014-12-30
  • 2016-09-08
  • 2014-11-24
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多