我正在尝试从日志文件中读取所有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()
问题是我按照字符串中的第一个字符对列表进行排序。
答案 0 :(得分:0)
字符串比较是"Lexicographical order",这就是为什么你得到第一个数字排序的印象。这是因为它按元素排序,首先它比较第一个字符,如果它们等于第二个字符,如果它们等于第三个字符,依此类推。
您需要将其转换为数字才能获得类似数字的比较:
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