第一天使用python和新编码器,非常感谢一些帮助,我有一个日志文件
End: 1398789531: 934328 6 V 160.0.0.9:18299
End: 1398789535: 938994 6 V 160.0.0.7:14586
End: 1398789540: 944668 6 V 160.0.0.9:36690
我想提取IP地址,剥离端口并将IP转换为十六进制以便进一步处理,到目前为止我只有这个工作
with open('myfile') as infile:
for line in infile:
print(line.split()[5])
result =
160.0.0.9:18299
160.0.0.7:14586
160.0.0.9:36690
任何人都可以向我展示一个优雅的解决方案,用于将端口剥离端,然后将它们转换为十六进制...
欢呼声
答案 0 :(得分:1)
如果您的文件是myfile:
End: 1398789531: 934328 6 V 160.0.0.9:18299
End: 1398789535: 938994 6 V 160.0.0.7:14586
End: 1398789540: 944668 6 V 160.0.0.9:36690
下一段代码:
with open("myfile", 'r') as file:
for line in file:
ip_addr_hex = map(hex, map(int, list(line.split()[-1].split(':')[0].split('.'))))
print(ip_addr_hex)
将生成输出波纹管,即每个IP的十六进制数:
['0xa0', '0x0', '0x0', '0x9']
['0xa0', '0x0', '0x0', '0x7']
['0xa0', '0x0', '0x0', '0x9']
以下代码:
with open("myfile", 'r') as file:
for line in file:
ip_addr_hex = '.'.join(map(hex, map(int, list(line.split()[-1].split(':')[0].split('.')))))
print(ip_addr_hex)
将产生此输出:
0xa0.0x0.0x0.0x9
0xa0.0x0.0x0.0x7
0xa0.0x0.0x0.0x9
您可以根据所需的输出选择代码。 你需要从这里得到的是“循环到位”,它利用了“地图”功能。一般用途是map(func,list)。
您必须阅读 inside - >中的声明退出。首先,line.split [-1]捕获该行的最后一个元素(-1)。接下来,.split(':')[0]捕获由':'分隔的字符串的第一个元素,这是您的IP。第三,.split('。'),划分IP的元素。 list()将整个字符串转换为一个列表,这样你就可以同时在每个元素上应用map函数,这些字符串就是这一点。在这种情况下,应用的第一个函数是map(int,list(...))。这将整数转换为所有字符串。现在,你有一个整数列表,你再次应用map函数map(hex,....)来转换十六进制值中的所有整数。这有道理吗?从这里得到的要点是你必须从里面阅读整个陈述 - >进行。
答案 1 :(得分:0)
with open('myfile') as infile:
for line in infile:
ip = line.split()[5].split(':')[0].split('.')
hex = ''
for i in ip:
hex += hex(int(i))
print hex