如何使用Python程序跟踪csv文件中的修订?
我有一个CSV文件,其中每一行都有一个ID,后跟几个属性。最初,我的任务是找到具有匹配属性的ID,并将它们作为一个族组合在一起。然后,以打印在不同行中的每个关系的格式将它们输出到另一个CSV文档中 CSV文件的基本轮廓如下所示:如何使用Python程序跟踪csv文件中的修订?,python,csv,Python,Csv,我有一个CSV文件,其中每一行都有一个ID,后跟几个属性。最初,我的任务是找到具有匹配属性的ID,并将它们作为一个族组合在一起。然后,以打印在不同行中的每个关系的格式将它们输出到另一个CSV文档中 CSV文件的基本轮廓如下所示: FAMILIES = {} ATTRIBUTES = ['ID', 'SIZE', 'SPEED', 'RANK'] with open('data.csv', 'rb') as f: data = csv.DictReader(f) for row in da
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)
ID大小速度等级
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,如下所示:
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)
('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
和家庭3输出:
('10,20,2')123 890
('10,20,2') 890 123
您当前的代码不起作用,即使已修复,也不会“打印到CSV”您在问题中显示的内容。一个主要错误是系列
字典的键值是每行中所有字段的元组,与之相关联的值是行['ID']
中的值。我认为在要求我们帮助您完成其他您想要完成的事情之前,您应该先修复这个错误和其他错误。您当前的代码不工作,即使修复,也不会“打印到CSV”您在问题中显示的内容。一个主要错误是系列
字典的键值是每行中所有字段的元组,与之相关联的值是行['ID']
中的值。我认为在要求我们帮助你完成你想做的其他事情之前,你应该纠正这个错误和其他错误。