【问题标题】:Why do some rows in csv file have an invalid format?为什么 csv 文件中的某些行格式无效?
【发布时间】:2016-10-29 17:13:43
【问题描述】:

我目前正在从 API 获取数据,我想将这些数据存储为 csv。

但是,有些行总是无效的,这意味着我无法通过 Excel 的 text-in-columns 功能拆分它们。

我按如下方式创建 csv 文件:

with open(directory_path + '/' + file_name + '-data.csv', 'a', newline='') as file:
    # Setup a writer
    csvwriter = csv.writer(file, delimiter='|')

    # Write headline row
    if not headline_exists:
        csvwriter.writerow(['Title', 'Text', 'Tip'])

    # Build the data row
    record = data['title'] + '|' + data['text'] + '|' + data['tip']

    csvwriter.writerow([record])

如果您在 Excel 中打开 csv 文件,您也会立即看到该行无效。有效的采用默认高度和整个宽度,无效的采用更高的高度但更小的宽度。

有人知道这个问题的原因吗?

【问题讨论】:

  • 看起来您并没有告诉 excel 使用管道 | 作为分隔符。它可能试图使用其他东西并破坏东西。此外,您根本没有利用 csvwriter - 您正在手动构建行并将它们写为纯字符串。 csv 会让你给它一个字典映射和一个字典/字典列表,并根据键编写。看看csv.DictWriter,如果它变得更大。
  • record = data['title'] + '|' + data['text'] + '|' + data['tip'] 是 1 列而不是 3 列

标签: python csv


【解决方案1】:

这些行不是无效的,但你所做的是。

首先:您使用管道作为分隔符。在某些情况下它很好,但考虑到您想立即将其加载到 excel 中,我将数据导出到 "excel" dialect 中似乎更明智:

csvwriter = csv.writer(file, dialect='excel')

其次,看下面几行:

record = data['title'] + '|' + data['text'] + '|' + data['tip']
csvwriter.writerow([record])

通过这种方式,您基本上可以告诉 csv 编写器您想要一个包含管道的列。如果您使用 csv 编写器,则不得自行连接分隔符,这会使使用编写器的意义无效。所以应该这样做:

record = [data['title'], data['text'], data['tip']]
csvwriter.writerow(record)

希望对你有帮助。

【讨论】:

    【解决方案2】:

    我终于发现我必须去掉文本和提示,因为它们有时包含会破坏格式的空格。

    此外,我还遵循了使用excel dialect 的建议,因为我认为这将使以后处理数据更加容易。

    【讨论】:

      猜你喜欢
      • 2022-06-21
      • 1970-01-01
      • 2014-12-11
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      • 2021-09-17
      相关资源
      最近更新 更多