gpt4 book ai didi

python - 正则表达式在列表元素中查找匹配项

转载 作者:行者123 更新时间:2023-12-01 03:59:54 27 4
gpt4 key购买 nike

我是Python新手,并且已经从一个文件中编译了一个项目列表,其中包含文件中出现的元素及其在文件中的频率,如下所示

('95.108.240.252', 9)

我收集的主要是 IP 地址。我想像这样输出地址和频率

IP               Frequency
95.108.240.252 9

我试图通过重新调整列表项并打印它来做到这一点,但当我尝试 TypeError: Expected string or bytes-like object

时,它会返回以下错误

这是我现在用来完成所有操作的代码:

ips = [] # IP address list
for line in f:
match = re.search("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", line) # Get all IPs line by line
if match:
ips.append(match.group()) # if found add to list

from collections import defaultdict
freq = defaultdict( int )
for i in ips:
freq[i] += 1 # get frequency of IPs

print("IP\t\t Frequency") # Print header

freqsort = sorted(freq.items(), reverse = True, key=lambda item: item[1]) # sort in descending frequency
for c in range(0,4): # print the 4 most frequent IPs
# print(freqsort[c]) # This line prints the item like ('95.108.240.252', 9)
m1 = re.search("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", freqsort[c]) # This is the line returning errors - trying to parse IP on its own from the list
print(m1.group()) # Then print it

还没有尝试解析频率,只是想以 IP 作为起点

最佳答案

re.search() 中的第二个参数应该是字符串,并且您正在传递元组。因此它会生成一个错误,指出它需要 stringbuffer

注意:-此外,您还需要确保 IP 地址至少有 4 个元素,否则会出现索引越界错误

删除最后两行并使用它

print(freqsort[c][0])

如果你想坚持你的格式,你可以使用以下内容,但它没有用

m1 = re.search(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", freqsort[c][0]) # This is the line returning errors - trying to parse IP on its own from the list
print(m1.group())

关于python - 正则表达式在列表元素中查找匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36773482/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com