我正在尝试从日志文件中读取所有IP地址。我创建了一个唯一 IP 地址列表,并希望根据 IP 地址显示排序列表
import sys
import re
def ip_check(temp):
str=re.search(r"(d+).(d+).(d+).(d+)",temp)
return str.group(1)
def main():
file=open(sys.argv[1],'rU')
text=file.read()
file.close()
string = re.findall(r"d+.d+.d+.d+",text)
ip_addr = list(set(string))
for item in sorted(ip_addr, key=ip_check, reverse=False):
print item,'n'
if _ terms _name__ == '__main__':
main()
问题是我正在根据字符串中的第一个字符对列表进行排序。
字符串比较是按"词典顺序"进行的,这就是为什么你觉得它是按第一个数字排序的。那是因为它按元素排序,首先比较第一个字符,如果它们相等,则比较第二个字符,如果它们相等,则比较第三个字符,依此类推。
您需要将其转换为数字才能获得类似数字的比较:
def ip_check(temp):
str=re.search(r"(d+).(d+).(d+).(d+)",temp)
return int(str.group(1)) # convert to integer
例如:
def main():
# I don't have your log file so I just made one up myself...
text = """128.128.123.1
3.1.1.1
0.0.0.1"""
string = re.findall(r"d+.d+.d+.d+",text)
ip_addr = list(set(string))
for item in sorted(ip_addr, key=ip_check, reverse=False):
print (item)
if __name__ == '__main__':
main()
给:
0.0.0.1
3.1.1.1
128.128.123.1