【问题标题】:Handling Data & Sorting Results in Python在 Python 中处理数据和排序结果
【发布时间】:2021-12-08 16:23:24
【问题描述】:

我在处理从 Python/Kubectl 查询返回的数据时遇到问题。

我的目标是获取所有超过 30 天 (>30d) 的 NAME。

之后,我想将这些结果的名称加载到一个数组中。

Python 脚本:

import subprocess

subprocess.run(["kubectl", "get", "namespaces"])

Python 脚本在终端中返回的数据:

NAME                      STATUS   AGE
dread-gorge               Active   24d
dread-lagoon              Active   210d
carncier-basin            Active   164d
chantague-shallows        Active   164d
hilraine-loch             Active   311d
stangrave-waters          Active   271d

【问题讨论】:

  • 返回数据的数据类型是什么?
  • 这是在 Linux 机器上运行 kubectl 脚本的 Python 查询的结果,我应该提到。它只是在终端中打印出结果。

标签: python regex


【解决方案1】:

这个怎么样:^([a-z]+(?:-[a-z]+)+) +\w+ +(?:\d{3,}|[3-9]\d)d

https://regex101.com/r/SOmSm6/1

【讨论】:

    【解决方案2】:

    inp 是您的输入数据(作为数组)。

    准备正则表达式:
    ([-a-z]+) - NAME
    ([A-Za-z]+) - 状态
    (\d+) - AGE(最后一个'd'将被丢弃)

    \s - 任意长度的空格和制表符序列。

    match 的第一个值将是整个字符串,因此索引从 1 (1 - NAME, 3 - AGE) 开始

    result = []
    max_days = 30
    pattern = re.compile(r'([-a-z]+)\s+([A-Za-z]+)\s+(\d+)d')
    for line in inp[1:]:
        match = pattern.match(line)
        if int(match[3]) > max_days:
            result.append(match[1])
    

    【讨论】:

    • 我得到错误 inp[1:] TypeError: 'CompletedProcess' object is not subscriptable
    • 我认为您需要执行以下操作才能获取输入:result = subprocess.run(["kubectl", "get", "namespaces"], capture_output=True, text=True),然后获取字符串列表:inp = result.stdout.split('\n')。我现在没有机会检查它,但我认为它应该可以工作。
    • 尝试使用修改后的输入,但结果仍然相同。
    • 请显示 subprocess.run 的输出
    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 2023-04-05
    • 2023-04-07
    • 2013-06-28
    • 1970-01-01
    • 2019-04-11
    • 2021-09-11
    • 1970-01-01
    相关资源
    最近更新 更多