我有两个 csv 文件,我正在使用一个 csv 从另一个 csv 搜索所有记录并更新其状态。我有两个表,并从 input.csv 中的搜索表中查找 IP 和 PROTOCOL。如果存在,则 EXISTS 列将更新为“否”。我被困在两个或多个记录的协议和 ip 相同的地方,但它们有不同的端口。它只更新一条记录。
import csv
IP, EXISTS, PROTOCOL = 'IP', 'Exists', 'Protocol' # Field names referenced.
# Read entire input file into a list.
with open('input.csv', 'r', newline='') as inp:
reader = csv.DictReader(inp)
inputs = list(reader)
# Update input rows that match data in search.csv file.
with open('search.csv', 'r', newline='') as sea:
sea_reader = csv.DictReader(sea)
for row in sea_reader:
protocol, ip = row[PROTOCOL], row[IP]
for input_ in inputs:
if input_[PROTOCOL] == protocol and input_[IP] == ip: # Match?
input_[EXISTS] = 'No'
break
# Write updated input.csv data out into a file.
with open('input_updated.csv', 'w', newline='') as outp:
fieldnames = inputs[0]
writer = csv.DictWriter(outp, fieldnames)
writer.writeheader()
for input_ in inputs:
writer.writerow(input_)
print('done')
输入.csv
姓名 | 知识产权 | 协议 | 港口 | 存在 |
---|---|---|---|---|
l1 | 192.132.16.02 | HTTP | 80 | |
l2 | 192.132.16.03 | SSL | 8443 | |
l3 | 192.132.16.03 | SSL | 443 | |
l4 | 192.132.16.04 | SSL | 443 |
搜索.csv
不 | 协议 | 知识产权 | 港口 |
---|---|---|---|
1 | HTTP | 192.132.16.02 | 80 |
2 | SSL | 192.132.16.03 | 443 |
3 | SSL | 192.132.16.03 | 8443 |
在 search.csv 中有两条记录,它们具有相同的协议和 ip,但端口不同。结果,它只包括一条记录,而不是两者。我也尝试在条件下添加端口,但它不起作用