Python:选择字符串的一部分

标签 python list

我有一个从文本文件中提取的字符串列表。我需要阅读每一行并“选择”两个特定部分。以下是文本文件(防火墙报告)中的示例行:

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/

相关文章:

python - 在 Python 中使用互斥锁和并发 future

python - 根据没有公共(public)列的其他两个日期之间的日期合并两个数据框

python - 如何使用 pydub 检测空的立体声 channel

python - 字典只返回 for 循环中的最后一个键值对

list - 将多个复选框绑定(bind)到 Grails 中的列表

python - 在 Python 中获取列表的值

python - 对列表进行排序并在正确的位置添加 None 值

python - 如何使用 Atom 编辑器运行 Python 单元测试?

java - 如何获取List中多个最大值的索引

python - 如何在 Python 中从用户定义的类创建集合