【问题标题】:I need to compare two sets and alert on any matched elements我需要比较两组并警告任何匹配的元素
【发布时间】:2019-08-09 17:00:34
【问题描述】:

python 的新手。

首先 我想使用请求从网页正文中提取 IP 地址列表。我有那个列表并使用 -Splitlines- 来格式化我的列表并删除除 IP 地址之外的任何内容。我正在将此列表添加到集合中。

第二 我想从 CSV 文件中提取 IP 地址列表。我有列表,还使用 ​​-Splitlines- 格式化并添加到集合中。但是,如果我在片场运行 len,我会丢失大约 1,000 行(共 18,000 行)。

此外,我尝试了几种不同的方法来比较这些集合,但我没有看到任何危险信号表明两个集合中都存在一个元素。这可能是由于缺少行。

4 小时的谷歌搜索 - 终于决定寻求帮助

r = requests.get(url) 

black = set() 
for line in r.text.splitlines(): 
    bip = line.split(' ')[0]  
    black.add(bip) 
# print(black) # Print for testing


file = "file_wip.csv"

white = set()
with open(file, 'r') as filehandle:
    for line in filehandle:
      wip = line.split(',')[0] 
      white.add(wip)
# print(white) # Print for testing

# black.intersection(white) <-- my attempts to compare
# set(black) == set(white)```


1. len on the sets do not provide an accurate line count
2. comparing the sets is blank

【问题讨论】:

  • 尚不完全清楚您在寻找什么,here are the docs 在 python 3 中用于设置操作。你可以尝试black &amp; white(看起来你已经完成了),black - white 用于差异,black ^ white 用于对称差异,black &lt; whiteblack&gt;=white 用于子集。您是否正在尝试查找两者中 的元素,您是否正在尝试查找两者中 的元素?一些示例输入和输出可能会有所帮助
  • 我为造成的混乱道歉。我正在尝试查找两者中的元素(IP 地址)。 set from url 93.43.2.3 83.23.2.2 98.21.2.4 set from csv 54.54.3.2 90.90.32.3 98.21.2.4 我想收到关于 98.21.2.4 地址在两个集合中的警报
  • 根据您包含的内容,url &amp; csvurl.intersection(csv) 返回 {'98.21.2.4'}any(i in url for i in csv) 返回 True。你检查过格式差异吗?前导或尾随空格/换行符是常见的罪魁祸首。
  • 而且,关于您的列表“缺少”元素这一事实,原件中是否有任何重复项?这将导致长度差异。
  • 感谢 G. 安德森!

标签: python python-3.x set compare


【解决方案1】:

你的逻辑似乎是正确的

black = set(['93.43.2.3', '83.23.2.2' ,'98.21.2.4'])
white = set(['54.54.3.2' ,'90.90.32.3' ,'98.21.2.4'])

print(black.intersection(white))

输出

{'98.21.2.4'}

您是否检查了print(black)print(white) 输出是否存在任何差异?

如果您的数据有重复值,它们将被删除。这可能是长度不匹配的原因

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2015-10-05
    相关资源
    最近更新 更多