我有一个CSV文件,其中每行都有一个ID,后跟几个属性。最初,我的任务是找到具有匹配属性的ID,并将它们作为一个系列放在一起。然后,以不同行中打印的每个关系的格式将它们输出到另一个CSV文档中。
CSV文件的基本大纲如下所示:
ID SIZE SPEED RANK
123 10 20 2
567 15 30 1
890 10 20 2
321 20 10 3
295 15 30 1
python模块的基本大纲如下所示:
FAMILIES = {}
ATTRIBUTES = ['ID', 'SIZE', 'SPEED', 'RANK']
with open('data.csv', 'rb') as f:
data = csv.DictReader(f)
for row in data:
fam_id = str(tuple([row[field_name] for field_name in ATTRIBUTES]))
id = row['ID']
FAMILIES.setdefault(fam_id, [])
FAMILIES[fam_id].append(id)
output = []
for fam_id, node_arr in FAMILIES.items():
for from_item in node_arr:
for to_item in node_arr:
if from_item != to_item:
output.append(fam_id, from_item, to_item)
def write_array_to_csv(arr):
with open('hdd_output_temp.csv', 'wb') as w:
writer = csv.writer(w)
writer.writerows(arr)
if __name__ == "__main__":
write_array_to_csv(output)
将打印成这样的CSV:
('10,20,2') 123 890
('10,20,2') 890 123
('15,30,1') 567 295
('15,30,1') 295 567
现在,我的问题是,如果我要进入原始csv文件并进行一些修订,我怎么能改变代码来检测所有更新的关系。我想将所有增加的关系放入FAMILIES2,将所有破碎的关系放入FAMILIES3。因此,如果添加了与'20,10,3'系列相匹配的新ID'589',并且'890'被更新为具有不同的ID '10,20,1', 我希望FAMILIES 2能够输出:
('20,10,3') 321 589
('20,10,3') 589 321
和FAMILIES3输出:
('10,20,2') 123 890
('10,20,2') 890 123