【问题标题】:How to add double quotes to strings in csv using Python如何使用 Python 为 csv 中的字符串添加双引号
【发布时间】:2016-01-07 09:26:35
【问题描述】:

我已在 CSV 文件中设置数据,我想为文本和字母数字数据添加双引号,其余整数、浮点数和小数不在双引号中。

有人可以帮忙吗?

样本数据:

1, 3434, 789459 ,bdgvdjhjdhf, nagesd232 ,2yuyfudyf, #123 abc calony bangalore 

预期的结果是:

1, 3434, 789459 ,"bdgvdjhjdhf", "nagesd232" ,"2yuyfudyf", "#123 abc calony bangalore" 

【问题讨论】:

    标签: python csv


    【解决方案1】:

    你可以使用Python的csv模块如下:

    import csv
    
    with open('input.csv', newline='') as f_input, open('output.csv', 'w', newline='') as f_output:
    
        csv_input = csv.reader(f_input, skipinitialspace=True)
        csv_output = csv.writer(f_output, quoting=csv.QUOTE_NONNUMERIC)
    
        for row_input in csv_input:
            row_output = []
            for col in row_input:
                try:
                    row_output.append(int(col))
                except ValueError, e:
                    row_output.append(col)
    
            csv_output.writerow(row_output)
    

    这会从input.csv 中读取每一行,并尝试转换int 中的每个条目。如果失败,则将其存储为字符串。然后将每一行写入output.csv,给出以下类型的输出:

    1,3434,789459,"bdgvdjhjdhf","nagesd232 ","2yuyfudyf","#123 abc calony bangalore"
    

    如果您的 csv 还包含 float 格式的列,则可以使用以下方法:

    import csv
    
    with open('input.csv', newline='') as f_input, open('output.csv', 'w', newline='') as f_output:
        csv_input = csv.reader(f_input, skipinitialspace=True)
        csv_output = csv.writer(f_output, quoting=csv.QUOTE_NONNUMERIC)
    
        for row_input in csv_input:
            row_output = []
            for col in row_input:
                try:
                    row_output.append(int(col))
                except ValueError, e:
                    try:
                        row_output.append(float(col))
                    except ValueError, e:
                        row_output.append(col)
    
            csv_output.writerow(row_output)
    

    如果使用的是 Python 2.x,请使用:

    with open('input.csv', 'rb') as f_input, open('output.csv', 'wb') as f_output:
    

    【讨论】:

    • 我一直在寻找这样的解决方案!我可以让它在单个文件上工作,但我试图通过一个文件目录(大约 600 个)迭代它。是否有可能做到这一点?我在这里有一个问题 - stackoverflow.com/questions/55369361/…
    【解决方案2】:
    input_data = '1, 3434, 789459 ,bdgvdjhjdhf, nagesd232 ,2yuyfudyf, #123 abc calony bangalore'
    output = []
    for i in input_data.split(','):
        i = i.strip()
        if not i.isnumeric():
            output.append('"%s"' % i)
        else:
            output.append(i)
    print(', '.join(output))
    

    【讨论】:

    • 您应该解释您的解决方案,而不仅仅是发布代码块。
    【解决方案3】:

    您可以检查哪个类具有您的任何值:

    list_val = [1, 3434, 789459 ,bdgvdjhjdhf, nagesd232 ,2yuyfudyf, #123 abc calony bangalore]
    for i in list_val:
        if i.__class__ = str:
        .....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      相关资源
      最近更新 更多