【问题标题】:Python csv text manipulationPython csv 文本操作
【发布时间】:2012-02-22 05:34:44
【问题描述】:

我想将输入 .csv 文件中的组合字段组合起来以输出到 .csv 文件,其中一些包含逗号。这是我的简化代码

outfile = open('output.csv', 'w')

#these values are made up for this example; normally they would be read from
#a csv and passed to the following 'combine()' function

a = "John"  
b = ",Jr."  

def combine(a, b):  
    if a == "":  
        pass  #don't write anything if the field is empty
    else:  
        outfile.write(a)  
    if b =="":  
        pass  
    else:  
        outfile.write(b)  

如果 b 以逗号开头,如何输出“John, Jr.” ?我曾尝试使用 csv.writer writerow() 但它在每个字符之间放置了一个逗号分隔符。我尝试定义一个escapechar,但它只输出“John \”、“Jr”。有什么建议吗?

【问题讨论】:

    标签: python csv comma


    【解决方案1】:

    如果您想了解有关 CSV 的详细信息,请参阅规范:https://www.rfc-editor.org/rfc/rfc4180

    一般来说,它说明了以下内容 “包含换行符 (CRLF)、双引号和逗号的字段应该用双引号括起来。”

    “如果使用双引号将字段括起来,则出现在字段中的双引号必须通过在其前面加上另一个双引号来进行转义。”

    Excel 等实现总是将所有字段值放在双引号中。

    如果你打开一个文件进行读或写,你可以直接指定引用的类型

    mcvs = csv.writer(open('file.csv', 'wb'), quoting=csv.QUOTE_ALL)
    

    将始终在字段值周围添加引号。

    对于所有可能的值,请查看 python 文档

    http://docs.python.org/library/csv.html#module-csv

    【讨论】:

    • 我已经通过在整个“名称”输出字段周围手动双引号来解决它。我更喜欢这个,因为它使我的代码更具可读性。谢谢!
    【解决方案2】:

    csv.writer 允许您使用add a quoting keyword 来控制引用的方式。

    你可能想要csv.QUOTE_MINIMAL之类的东西。

    >>> import csv
    >>> with open('eggs.csv', 'wb') as outfile:
    ...     writer = csv.writer(outfile, quoting=csv.QUOTE_MINIMAL)
    ...     writer.writerow(['Spam'] * 5 + ['Baked Beans'])
    ...     writer.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
    

    【讨论】:

      【解决方案3】:

      csv.writer writerow() 需要一个值列表:

      foo.writerow(['John', ',Jr.'])
      

      【讨论】:

        【解决方案4】:

        如果你想坚持使用纯 Python:

        resultStr = a+b
        if ',' in resultStr: resultStr= '"' + resultStr + '"'
        

        【讨论】:

        • 这与我使用的解决方案非常相似。我将重写脚本以指定引用上面提到的所有内容。
        猜你喜欢
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        相关资源
        最近更新 更多