如何使用Python程序跟踪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

我有一个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 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']
中的值。我认为在要求我们帮助你完成你想做的其他事情之前,你应该纠正这个错误和其他错误。