Python:如何从另一个csv文件更新csv文件
我们有两个CSV文件:a.csv
和b.csv
。Python:如何从另一个csv文件更新csv文件
a.csv
有树列:标签,物品1,ITEM2。 b.csv
有两列:item1,item2。如果a.csv
物品1和ITEM2也occurr在b.csv
,这是a.csv
和b.csv
具有相同物品1和ITEM2,标签的a.csv
值应来代替。
例如:
a.csv
:
label item1 item2
0 123 35
0 342 721
0 876 243
b.csv
:
item1 item2
12 35
32 721
876 243
result.csv
:
label item1 item2
0 123 35
0 342 721
1 876 243
阅读您a.csv
成字典;使用一个(item1, item2)
的元组作为关键。然后在阅读b.csv
时,可以在处理文件时更新字典中每个条目的标签。
完成此过程后,请从字典中的信息中写出result.csv
。
import csv
rows = {}
with open('a.csv', 'r', newline='') as acsv:
areader = csv.DictReader(acsv)
for row in reader:
# store the row based on the item1 and item2 columns
key = (row['item1'], row['item2'])
rows[key] = row
with open('b.csv', 'r', newline='') as bcsv:
breader = csv.DictReader(bcsv)
for row in reader:
# set the label of matching rows to 1 when present
key = (row['item1'], row['item2'])
if key in rows:
rows[key]['label'] = 1
with open('result.csv', 'w', newline='') as result:
writer = csv.DictReader(result, fieldnames=areader.fieldnames)
writer.writerows(rows.values())
我用csv.DictReader()
objects来缓解列名处理。每行都以字典的形式显示,并从CSV文件的第一行中获取关键字。
我还假设你正在使用Python 3;如果您使用Python 2,则必须调整open()
调用以删除newline=''
参数,并且需要使用二进制模式('rb'
和'wb'
)。我没有指定文件的编解码器;目前默认的系统编解码器将用于读取和写入。如果这不正确,请添加encoding='...'
参数。
如何使用(item1,item2)的元组作为键?我是Python的新手 – 2015-04-02 13:01:33
@HuanRen:我已经在我的答案中包含了代码。 – 2015-04-02 13:03:57
我使用Python3,我运行你的代码,结果显示一个错误:KeyError:key =(row [1],row [2])。 – 2015-04-02 13:16:18
结果可以写入一个新的csv文件“result.csv” – 2015-04-02 12:48:03
你试过了什么? – 2015-04-02 12:50:00