【问题标题】:python csv writer not handling escaping '|' correctlypython csv writer不处理转义'|'正确地
【发布时间】:2014-03-19 11:03:24
【问题描述】:

我正在尝试将一些 JSON 写入文件,以下是用于打开文件的代码,请记住我需要 quoting 和 "quotechar" 参数以确保 JSON 在写入文件时有效。

file = csv.writer(open("myfile" + ".txt",'ab'),delimiter = '|',quoting=csv.QUOTE_NONE, quotechar='')

由于某种原因,如果 JSON 包含“|”抛出异常并显示消息“需要转义,但没有设置转义字符”。下面是一个示例,有没有办法通过在打开文件时传递参数或以任何其他方式避免此类问题?

"clickthrulink.Description": "|this is a test"

【问题讨论】:

    标签: python json csv escaping


    【解决方案1】:

    设置转义字符以转义 JSON 值中的 | 字符。再次读取 CSV 文件时,您需要重新使用相同的转义字符:

    file = csv.writer(open("myfile" + ".txt",'ab'),
                      delimiter = '|', quoting=csv.QUOTE_NONE, quotechar='',
                      escapechar='\\')
    

    演示:

    >>> from cStringIO import StringIO
    >>> import csv
    >>> f = StringIO()
    >>> writer = csv.writer(f, delimiter = '|', quoting=csv.QUOTE_NONE, quotechar='', escapechar='\\')
    >>> writer.writerow(['{"clickthrulink.Description": "|this is a test"}'])
    >>> f.getvalue()
    '{"clickthrulink.Description": "\\|this is a test"}\r\n'
    >>> print f.getvalue()
    {"clickthrulink.Description": "\|this is a test"}
    

    【讨论】:

    • 这适用于所有场景吗?我在这里导入了数百万行,有没有办法确保我不会再看到其他角色出现这个问题?
    • @godzilla:这将转义 delimiter 以便具有相同配置的 csv.reader() 仍然可以读取您的 CSV 数据,而不会解释值中的转义分隔符。所以是的,这适用于所有场景。
    • @godzilla:但是,我确实质疑您选择 CSV 来写入 JSON 值。为什么不写 JSON only?您可以将数据包装在外部字典或列表中,逐行写入文件。
    • 除了 json 之外,我还需要编写其他字段,使用 csv 是因为我需要将结果转储到数据库中。在最坏的情况下,我可以只写入一个平面文件,但并不理想!
    • 对。那么数据库会导入CSV吗?大概那边的 CSV 阅读器可以正确处理引用,为什么你需要完全禁用引用?标准方言配置通常工作得很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2023-02-17
    • 1970-01-01
    • 2014-10-02
    • 2010-11-15
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多