从包含特定字母的字符串创建字典

Creating dictionary from strings containing a specific letter

我正在尝试从包含测试结果的文本文件创建字典。

文本文件如下所示:

NETAPP-MIB::enclTempSensorsCurrentTemp.1 = STRING: 29C (84F) ambient, 36C (96F), 36C (96F), 36C (96F), 36C (96F), 36C (96F), 57C (134F), 37C (98F), 57C (134F), 44C (111F), 59C (138F), 40C (104F), 45C (113F), 58C (136F), 42C (107F)

我的目标是获取所有包含带字母 C 的数字的结果。 但我设法只得到第一个值

例如,这是我得到的:

{'TEST sensor num 0': '29C'}

这是我的代码:

import re

def get_names(ip):
    """Get the server name according the IP address"""
    names = {"TEST": "10.205.110.226", "TEST2": "10.205.111.216"}
    if ip in names.values():
        for key, val in names.items():
            if ip == val:
                return key
    else:
        return f"No Recognized unit {ip}"


def get_temps_servers():
    """ Return A dict mapping from sensor name to sensor value """
    result = {}
    count = 0
    with open("test.txt", "r") as newdata:
        text = newdata.read()
    for ip in online_server:
        name = get_names(ip)
        for c in re.findall(r"^.*?(\d+C)", text, flags=re.M):
            result[f"{name} sensor num {count}"] = c
            count = count + 1
    print(result)
    return result


global online_netapp
online_server = ["10.205.110.226"]

get_temps_servers()

我想要得到的是这样的结果:

{'TEST sensor num 0': '29C', 'TEST sensor num 1': '36C', 'TEST sensor num 2': '36C'}

只要有带C的号码就会一直这样下去

我做错了什么?

也许这会把你推向正确的方向:

import json
import re

pattern = re.compile(r"\d{2}C")
long_string = "NETAPP-MIB::enclTempSensorsCurrentTemp.1 = STRING: 29C (84F) ambient, 36C (96F), 36C (96F), 36C (96F), 36C (96F), 36C (96F), 57C (134F), 37C (98F), 57C (134F), 44C (111F), 59C (138F), 40C (104F), 45C (113F), 58C (136F), 42C (107F)"
d = {
    f"TEST sensor num {index}": temp
    for index, temp in enumerate(re.findall(pattern, long_string))
}

print(json.dumps(d, indent=2))

输出:

{
  "TEST sensor num 0": "29C",
  "TEST sensor num 1": "36C",
  "TEST sensor num 2": "36C",
  "TEST sensor num 3": "36C",
  "TEST sensor num 4": "36C",
  "TEST sensor num 5": "36C",
  "TEST sensor num 6": "57C",
  "TEST sensor num 7": "37C",
  "TEST sensor num 8": "57C",
  "TEST sensor num 9": "44C",
  "TEST sensor num 10": "59C",
  "TEST sensor num 11": "40C",
  "TEST sensor num 12": "45C",
  "TEST sensor num 13": "58C",
  "TEST sensor num 14": "42C"
}

您的正则表达式不正确,它只查找最多匹配的第一个数字 (29c)。在这里查看 https://regex101.com/r/sGVyac/1

尝试像这样排除插入符 (\d+C)https://regex101.com/r/A40nuu/1

此代码有效:

from sys import stdin
inputString=stdin.readline().split()
outputDict=dict()
for i in range(len(inputString)//2):
    outputDict["test sensor num{}".format(i)] = inputString[2*i]

print(outputDict) 

如果输入为:29C (84F)、36C (96F)、36C (96F)

输出将是: {'test sensor num0': '29C', 'test sensor num1': '36C', 'test sensor num2': '36C'}