从文件中获取 IP 地址并计算出现次数
Grabbing IP addresses from a file and counting the occurences
我是 python 的新手,在做作业时卡住了。我应该从文件中获取 IP 地址,然后计算每个 IP 出现的次数并打印出结果。
我不断收到错误消息:无法散列的类型:'list'
代码如下:
#!/usr/bin/python
import re
def grab_ip(file):
ips = []
occurence = {}
with open (file) as file:
for ip in file:
ips.append(re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})', ip))
for ipaddr in ips:
if ipaddr in occurence:
occurence[ipaddr] = occurence[ipaddr] + 1
else:
occurence[ipaddr] = 1
for key, value in occurence.iteritems():
print key, value
return None
print grab_ip('FILE_WITH_IPS.txt')
谢谢!
你完全在那里。只需使用 extend
而不是 append
因为 findall
函数的输出必须是一个列表。所以将一个列表附加到另一个列表将产生列表列表,这就是为什么你得到错误 Unhashable Type: 'list'
.
ips.extend(re.findall(r'\b(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\b', ip))
re.findall()
将 return 一个列表,因此尝试使用附加的花药循环:
#!/usr/bin/python
import re
def grab_ip(file):
ips = []
occurence = {}
with open (file) as file:
for ip in file:
ip_data=re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})',ip)
for i in ip_data:
ips.append(i)
for ipaddr in ips:
if ipaddr in occurence:
occurence[ipaddr] = occurence[ipaddr] + 1
else:
occurence[ipaddr] = 1
for key, value in occurence.iteritems():
print key, value
return None
print grab_ip('data')
这里是文件数据行:
123.0.9.1
fjdakl
jfkal 23.2.2.9
函数returnNone
我是 python 的新手,在做作业时卡住了。我应该从文件中获取 IP 地址,然后计算每个 IP 出现的次数并打印出结果。
我不断收到错误消息:无法散列的类型:'list'
代码如下:
#!/usr/bin/python
import re
def grab_ip(file):
ips = []
occurence = {}
with open (file) as file:
for ip in file:
ips.append(re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})', ip))
for ipaddr in ips:
if ipaddr in occurence:
occurence[ipaddr] = occurence[ipaddr] + 1
else:
occurence[ipaddr] = 1
for key, value in occurence.iteritems():
print key, value
return None
print grab_ip('FILE_WITH_IPS.txt')
谢谢!
你完全在那里。只需使用 extend
而不是 append
因为 findall
函数的输出必须是一个列表。所以将一个列表附加到另一个列表将产生列表列表,这就是为什么你得到错误 Unhashable Type: 'list'
.
ips.extend(re.findall(r'\b(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\b', ip))
re.findall()
将 return 一个列表,因此尝试使用附加的花药循环:
#!/usr/bin/python
import re
def grab_ip(file):
ips = []
occurence = {}
with open (file) as file:
for ip in file:
ip_data=re.findall(r'(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})\.(?:[\d]{1,3})',ip)
for i in ip_data:
ips.append(i)
for ipaddr in ips:
if ipaddr in occurence:
occurence[ipaddr] = occurence[ipaddr] + 1
else:
occurence[ipaddr] = 1
for key, value in occurence.iteritems():
print key, value
return None
print grab_ip('data')
这里是文件数据行:
123.0.9.1
fjdakl
jfkal 23.2.2.9
函数returnNone