【问题标题】:Replace data in csv file using python使用python替换csv文件中的数据
【发布时间】:2012-01-18 14:05:17
【问题描述】:

这是新的输入文件格式。我需要使用 python 自动替换 .csv 文件中一列内容的过程。我也可以使用记事本打开 .csv 文件并替换列的内容,但文件非常大而且需要很长时间。

Name                          ID                                                class  Num
"kanika",""University ISD_po.log";" University     /projects/asd/new/high/sde"","MBA","12"
"Ambika",""University ISD_po.log";" University     /projects/asd/new/high/sde"","MS","13"

在上面,我需要替换ID列的内容。 ID列非常不一致,因为它的内容中有很大的空格和(;,/)等符号。ID列中的新内容应该是“输入”。

此 Id 列用 2 个双引号括起来,并且还有一些额外的空格。而其他列只有 1 个双引号。

有没有办法在 python 中做到这一点?

【问题讨论】:

    标签: python csv


    【解决方案1】:

    您可以使用 Python 中的 csv 模块来实现这一点。

    csv.reader 将每一行作为字符串列表返回。然后,您可以使用 csv.writer 流式传输每一行并在此时修改 ID 列,但这将创建一个新文件。

    所以:

    import csv
    reader = csv.reader(open('file.csv', 'rb'))
    writer = csv.writer(open('outfile.csv','wb'))
    for row in reader:
        writer.writerow([row[0], "input", row[2], row[3]])
    

    【讨论】:

    • 我刚刚复制了您的代码并更改了输入文件名。我在“wb”处遇到语法错误。
    • '_csv.reader' 对象不可下标---这是错误
    • 确保你的最终语句是 writer.writerow([row[0], "input", row[2], row[3]])。参见“行”而不是“读者”
    • 好的,谢谢。它正在工作,但它已删除所有数据中的逗号和“”。如果文件包含一些空列并用 "" 括起来,那么您可能会错过所有内容。
    【解决方案2】:

    逐行读取 .csv,在 , 上拆分,然后将第二列替换为“输入”。 边写边写(到不同的文件):

    f = open('mycsv.csv','rb')
    fo = open('out.csv','wb')
    
    # go through each line of the file
    for line in f:
        bits = line.split(',')
        # change second column
        bits[1] = '"input"'
        # join it back together and write it out
        fo.write( ','.join(bits) )
    
    f.close()
    fo.close()
    

    然后你可以根据需要重命名替换原来的文件。

    【讨论】:

    • 使用 csv 模块更安全。如果"" 之间有逗号,则不应拆分它们
    • 干杯,我不知道 csv 模块。每天学习新东西!
    • 我仍然推荐@timc 的csv 答案,使用定制的 csv 解析器比使用自制代码更安全——尤其是当它是一个不会让你的代码膨胀的内置模块时完全没有!
    • 非常正确。但就我而言,您的代码运行良好。该代码更改了文件的类型。输出文件不再以 .csv 逗号分隔。
    • 不要使用wb模式!!它将覆盖每一行,直到最后一行。 ab不是更好吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 2016-08-21
    • 2014-01-20
    • 1970-01-01
    • 2015-03-09
    相关资源
    最近更新 更多