python - 如何使用 csv 模块处理字段值内的双引号?

标签 python csv

我正在尝试从我无法控制的外部系统解析 CSV 文件。

  • 逗号用作分隔符
  • 当单元格包含逗号时,它会用引号括起来,所有其他引号都用另一个引号字符转义。
  • (我的问题)当单元格没有用引号括起来时,所有引号字符都会用另一个引号转义。

  • 示例 CSV:

    qw""erty,"a""b""c""d,ef""""g"



    应该解析为:
    [['qw"erty', 'a"b"c"d,ef""g']]
    

    但是,我认为 Python 的 csv 模块不希望在单元格一开始没有用引号字符包裹时转义引号字符。csv.reader(my_file) (默认 doublequote=True )返回:
    ['qw""erty', 'a"b"c"d,ef""g']
    

    有没有办法用 python csv 模块解析这个?

    最佳答案

    继@JackManey 评论后,他建议替换 '""' 的所有实例双引号内的 '\\"' .

    识别我们当前是否在双引号单元内被证明是不必要的,我们可以替换 '""' 的所有实例与 '\\"' .
    Python documentation says :

    On reading, the escapechar removes any special meaning from the following character



    但是,在原始单元格已经包含转义字符的情况下,这仍然会中断,例如:'qw\\\\""erty'生产 [['qw\\"erty']] .所以我们也必须在解析之前转义转义字符。

    最终解决方案:
    with open(file_path, 'rb') as f:
      content = f.read().replace('\\', '\\\\').replace('""', '\\"')
      reader = csv.reader(StringIO(content), doublequote=False, escapechar='\\')
      return [row for row in reader]
    

    关于python - 如何使用 csv 模块处理字段值内的双引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28725898/

    相关文章:

    python - 实际测试我构建的应用程序(Flask,Python)

    python - python 中区分函数( Action )和变量(选项)的命名约定

    python - 将目标与 fetch_20newsgroups 中的目标名称匹配

    python - 如何将多个 python 文件组织成一个模块而不像一个包?

    php - 我是否采取了正确的方法来处理这些文件? (带有 PHP 的 CSV)

    python - CSV、Python : Using DictWriter correctly (ValueError: dict contains fields not in fieldnames)

    python - Pandas 将字符串写入 csv 而不是数组

    python - 如何使用 Python 仅打印 csv 文件的前 10 行?

    python - 在 linux 中意外失败的命令

    powershell - 在 PowerShell 中将 csv 列中的所有值转换为整数(或删除前导零)