【问题标题】:Inconsistent quotes on .csv file.csv 文件上的引号不一致
【发布时间】:2021-12-07 17:23:07
【问题描述】:

我有一个逗号分隔的文件,其中还包含实际字段值中的逗号,如下所示:

foo,bar,"foo, bar"

这个文件非常大,所以我想知道在 python 中是否有一种方法可以在任何字段周围加上双引号:

eg: "foo","bar","foo, bar"

还是只是整体更改分隔符?

eg: foo|bar|foo, bar

最终目标: 目标是最终将此文件加载到 sql server 中。鉴于文件批量插入的大小是唯一可行的加载方法,但由于我拥有的 ssms 版本,我无法指定文本限定符/字段引用。

这让我相信唯一剩下的方法是对源文件进行一些预处理。

【问题讨论】:

  • 我确信任何一个都可以用 Python 完成。
  • csv.reader 有一个quote character 参数。如果您指定 quotechar='"' 它应该将 "foo,bar" 视为单个列。
  • 你为什么关心不一致的引用?您的文件仅在必要时使用它们;添加更多只会增加文件大小。
  • 目标是最终将此文件加载到 sql server 中。鉴于文件批量插入的大小是唯一可行的加载方法,但由于我拥有的 ssms 版本,我无法指定文本限定符/字段引用。

标签: python csv qualifiers


【解决方案1】:

更改分隔符只需要解析和重新编码数据。

with open("data.csv") as input, open("new_data.csv", "w") as output:
    r = csv.reader(input, delimiter=",", quotechar='"')
    w = csv.writer(output, delimiter="|")
    w.writerows(r)

鉴于您的输入文件是相当标准的 CSV 版本,您甚至不需要为 reader 指定分隔符和引号参数;默认值就足够了。

r = csv.reader(input)

【讨论】:

    【解决方案2】:

    这不是不一致的引号。如果 CSV 文件中的值包含逗号或换行符,则会在其中添加引号。应该没问题,因为所有标准的 CSV 阅读器都可以正常阅读。

    【讨论】:

    • 我认为 OP 指的是不引用 every 字段的不一致,仅引用那些需要引用的字段。
    猜你喜欢
    • 1970-01-01
    • 2010-10-21
    • 2012-12-26
    • 1970-01-01
    • 2017-11-25
    • 2016-02-02
    • 2017-06-13
    • 2011-02-14
    相关资源
    最近更新 更多