【发布时间】:2018-10-04 01:45:49
【问题描述】:
我有 2 个 CSV 文件。 一个带有主机名和 IP。 第二个带有 IP 信息(网络掩码、Cidr、子网名称等)
我目前有如下情况。
for i, ipAddress in CSV1:
for j, ipNetwork in CSV2:
if ipAddress in ipNetwork:
append ipNetwork['Subnet Name']
不幸的是,第一个 csv 有 9000 个 IP,第二个列表有 30'000 个子网。这需要花费大量时间来迭代。我知道这是一种糟糕的实现方式,但我知道我总是可以改进的。
谁能告诉我如何更好地解决这个问题?如何搜索和比较每个元素中的元素以缩短此脚本的运行时间?
这是样本数据
[CSV 1 - Sample IP]
IP Address
144.196.86.89
56.144.25.138
3.16.101.238
123.18.128.50
19.22.2.124
78.88.241.163
144.44.200.20
27.215.172.218
124.90.163.19
[CSV 2 - Sample Subnet Information]
address netmask Company Subnet Name Compartment Type cidr
10.2.1.0 255.255.255.0 UPS UPS Site 1 Desktop 10.2.1.0/24
10.2.2.0 255.255.255.0 UPS UPS Site 2 Desktop 10.2.2.0/24
10.2.3.0 255.255.255.0 UPS UPS Site 3 Desktop 10.2.3.0/24
10.2.4.0 255.255.255.0 UPS UPS Site 4 Desktop 10.2.4.0/24
10.2.5.0 255.255.255.0 UPS UPS Site 5 Desktop 10.2.5.0/24
10.2.6.0 255.255.255.0 UPS UPS Site 6 Desktop 10.2.6.0/24
10.2.7.0 255.255.255.0 UPS UPS Site 7 Desktop 10.2.7.0/24
10.2.8.0 255.255.255.0 UPS UPS Site 8 Desktop 10.2.8.0/24
10.2.10.0 255.255.254.0 UPS UPS Site 9 Desktop 10.2.10.0/23
10.2.12.0 255.255.255.0 UPS UPS Site 10 Desktop 10.2.12.0/24
10.2.13.0 255.255.255.0 UPS UPS Site 11 Desktop 10.2.13.0/24
【问题讨论】:
-
你能分享一些数据吗?请参阅minimal reproducible example。
-
@jpp 我不明白你为什么不赞成他的问题。我认为它有足够的信息来保证解决方案或至少是想法
-
所以我推荐的一个建议是将 IP 地址和子网(假设它们都表示为字符串)转换为整数或字节。原因是字符串是不可变的,字符串比较是一项昂贵的操作。你也许能得到一些想法here
-
主要问题是我不知道为什么你现在的方法这么慢。你在使用原生 Python
open吗?csv模块?pandas?我们如何知道我们提供的解决方案是否是您当前使用的慢速解决方案? -
@Plisken,那么
CSV1/CSV2是什么?请提供 minimal reproducible example。
标签: python python-3.x pandas csv ip-address