python根据另一个csv文件更新csv文件的列值

时间:2015-04-02 07:33:06

标签: python

例如,考虑文件a.csv

1  23 'better' 0
2  21 'bad'    0
3  34 'good'   0

b.csv

23 2
34 5

我们可以得到结果:

1  23 'better' 2
2  21 'bad'    0
3  34 'good'   5

2 个答案:

答案 0 :(得分:2)

感谢您提出更清晰的问题。此代码不会在原位修改文件A,而是使用输出文件fileC。

import csv #imports module csv

filea = "fileA.csv"
fileb = "fileB.csv"
output = "fileC.csv"

delim = ";" #set your own delimiter

source1 = csv.reader(open(filea,"r"),delimiter=delim)
source2 = csv.reader(open(fileb,"r"),delimiter=delim)
#open csv readers

source2_dict = {}

# prepare changes from file B
for row in source2:
    source2_dict[row[0]] = row[1]

# write new changed rows
with open(output, "w") as fout:
    csvwriter = csv.writer(fout, delimiter=delim)
    for row in source1:
        # needs to check whether there are any changes prepared
        if row[1] in source2_dict:
            # change the item
            row[3] = source2_dict[row[1]]
        csvwriter.writerow(row)

我希望我理解你的意图。

只是对步骤的简短解释:

  • 首先指定源文件的路径和输出文件 你还指定了分隔符。
  • 然后使用csv模块加载CSV阅读器。
  • 您从源文件B中读取所有更改并将其存储在
    中 字典。
  • 然后迭代文件A,必要时修改行 然后将其保存到输出文件。

答案 1 :(得分:0)

  1. 阅读a.csv

    a_content = [l.split() for l in open('a.csv')]
    
  2. 阅读b.csv

    b_dict = {k:v for k,v in [l.split() for l in open('b.csv')]}
    
  3. 输出修改后的数据

    for rec in a_content:
        if rec[1] in b_dict:
           rec[3] = b_dict[rec[1]]
        outfile.write(" ".join(rec)+'\n')
    

  4. 附录

    考虑一下,单个print语句会做

    print "\n".join(" ".join(i[:-1]+([b[i[1]]]if i[1]in b else[i[-1]]))for b in[{k:v for k,v in[l.split()for l in open('b.csv')]}]for i in[l.split()for l in open('a.csv')])