将2个CSV文件与域和IP进行比较.行的顺序不同.读取文件X中的第1行与文件Y中的所有行进行比较



所以我在网上查看了一个远的exmaples,但它们似乎都认为数据是有序的。因此,两个文件中的第1行具有相同的信息。

在我的情况下,第1行文件X有一个IP和DNS。这个想法是检查这个IP地址是否可以在文件Y的任何一行中找到。

理想情况下,我会得到一个在文件Y中找不到的IP地址列表。

我试图将这些文件导入Pandas,但我的知识到此为止。

编辑:样品

文件1

dns,ip

what.dot.cz.,12.34.21.90

文件2

ip,dns

1.32.20.25,sea.ocean.cz

12.34.21.90 what.dont.cz

试试这个:

df_file1.loc[~df_file1.ip.isin(df_file2.ip)]

您可以使用csv模块和itertools模块来完成此操作。您将加载这两个文件,并使用如下嵌套循环执行线性搜索。这是可行的,但如果csv文件相当大,最好将它们导入sqlite表并在那里执行查询。

import csv
import itertools
file_x = "File X.csv"
file_y = "File Y.csv"
not_found = []
file_x_csv = open(file_x)
file_x_read = csv.DictReader(file_x_csv)
for row_x in file_x_read:
running = True
ip_x = row_x["ip"]
file_y_csv = open(file_y)
file_y_read = csv.DictReader(file_y_csv)
while running:
try:
row_y = next(file_y_read)
if ip_x == row_y["ip"]:
running = False
except StopIteration:  # Iterator concluded, search not found
not_found.append(ip_x)
running = False

print(not_found)

我最终使用了cli53,这为我提供了一个非常干净的区域中所有记录的列表。然后,我使用find和replace为所有值添加了一个逗号,并将其导入excel。对于我的特定用例来说,这是最好的解决方案。

最新更新