我有一个从文本文件中提取的字符串列表。我需要阅读每一行并“选择”两个特定部分。以下是文本文件(防火墙报告)中的示例行:
2011-04-13 08:52:55 Local4.Info 192.168.1.1 :Apr 13 08:52:55 PDT: %ASA-session-6-302014: Teardown TCP connection 41997800 for Workstations:192.168.2.85/1440 to Servers:192.168.1.6/43032 duration 0:00:00 bytes 2093 TCP FINs
我需要保存“工作站:”后面的 IP 地址,并知道它们是“工作站 IP”,并且我还需要保存服务器 IP。
我认为最好的技术是创建两个列表,一个用于工作站 IP,一个用于服务器 IP,然后读取每一行并将 IP 写入各自的列表。
但为了做到这一点,我需要选择它们,我可能会这样做:
workstationIPs = []
serverIPs = []
for line in report:
workstationIPs.append(line[a:b])
serverIPs.append(line[c:d])
“a”是工作站 IP 的开头,“b”是结尾(“c”和“d”与服务器 IP 相关)。
但是,并非所有线条的长度都相同,因此该选择方法不起作用。有谁知道如何从该行中提取这两个字符串?
PS:这是我的第一个问题,所以请让我知道错误,我可以重新提交。谢谢!)
最佳答案
您可以使用str.partition将字符串拆分并获得所需的部分:
workstation_ip = line.partition('Workstations:')[2].partition('/')[0]
server_ip = line.partition('Servers:')[2].partition('/')[0]
为了避免重复,创建一个函数:
def between(line, preceding, following):
return line.partition(preceding)[2].partition(following)[0]
...
workstation_ip = between(line, 'Workstations:', '/')
server_ip = between(line, 'Servers:', '/')
关于Python:选择字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33403345/