Python比较和更新CSV文件

时间:2018-08-14 15:38:31

标签: python csv

我有两个CSV文件。

csv_1列:

AP Name       Mac           Switch      Port
AP-2-2    001122334455   switchname1    0/37
AP-2-3    554433221100   switchname2    0/41

csv_2列:

    Mac         Switch      Port
001122334455   switchname1  0/37
554433221100   switchname2  0/41

我想根据发现的mac地址匹配时间(这些顺序不正确),用csv_1中的交换机和端口来更新csv_2中的交换机和端口列。

在python中正确执行此操作的最佳和最有效的方法是什么?我知道如何读取CSV文件,只是不确定如何正确检查这些值。

2 个答案:

答案 0 :(得分:0)

由于您没有提供特定的代码示例,因此我假设您已经解析了csv文件,并希望在处理方面有所帮助。尝试这样的事情:

for index_2, row_2 in enumerate(csv_2):
    for index_1, row_1 in enumerate(csv_1):
        if row_2.mac == row_1.mac:
            csv_1[index_1].switch = csv_2[index_2].switch
            csv_1[index_1].port = csv_2[index_2].port

然后,将csv_1写回到文件中。

答案 1 :(得分:0)

您可以使用熊猫来加入新值:

import pandas as pd

df1 = pd.read_csv("<path to csv1>.csv")
df2 = pd.read_csv("<path to csv2>.csv").rename(columns={"Switch": "new_switch", "Port": "new_port"})

# clean up column names
df1.columns = [i.strip() for i in df1.columns]
df2.columns = [i.strip() for i in df2.columns]

# join in new values
result = df1.join(df2.set_index("Mac"), on="Mac")

# use the new values where they're defined, otherwise fill in with the old values
result["Switch"] = result["new_switch"].fillna(result["Switch"])
result["Port"] = result["new_port"].fillna(result["Port"])

# delete the "new" columns, which are no longer needed
del result["new_switch"], result["new_port"]

# write out
result.to_csv("<path to new csv>.csv", index=False)

这假设您的csv2的每个Mac值只有一行。