我通过在Python中尝试收集传感器读数来开始我的第一个编程项目。
我已经设法将“ipmitool传感器列表”的输出作为字符串存储到变量中。 我想在商店前面的那两个字符串中查看字符串中的关键字值。
print myvariable的输出看起来像这样:
CPU Temp | 26.000 | degrees C | ok
System Temp | 23.000 | degrees C | ok
Peripheral Temp | 30.000 | degrees C | ok
PCH Temp | 42.000 | degrees C | ok
我希望字典看起来像{'CPU Temp': 26.000, 'System Temp': 23.000}
等
答案 0 :(得分:2)
你可以这样做:
a_string ="""CPU Temp | 26.000 | degrees C | ok
System Temp | 23.000 | degrees C | ok
Peripheral Temp | 30.000 | degrees C | ok
PCH Temp | 42.000 | degrees C | ok"""
a_dict = {key.strip():float(temp.strip()) for key, temp, *rest in map(lambda v: v.split('|'), a_string.splitlines())}
print(a_dict)
给出:
{'Peripheral Temp': 30.0, 'System Temp': 23.0, 'CPU Temp': 26.0, 'PCH Temp': 42.0}
对于python 2:
a_dict = {v[0].strip():float(v[1].strip()) for v in map(lambda v: v.split('|'), a_string.splitlines())}
答案 1 :(得分:0)
如果没有转义,请从[line.split("|") for line in data.splitlines()]
开始。
如果有棘手的字符和转义规则,您将要使用csv
模块解析它:https://docs.python.org/2/library/csv.html
答案 2 :(得分:0)
import itertools
string_to_split = """CPU Temp | 26.000 | degrees C | ok
System Temp | 23.000 | degrees C | ok
Peripheral Temp | 30.000 | degrees C | ok
PCH Temp | 42.000 | degrees C | ok"""
list_of_lines = string_to_split.split('\n')
list_of_strings = []
final_list = []
for index in range(0, len(list_of_lines)):
try:
final_list.append(list_of_lines[index].split('|')[0])
final_list.append(list_of_lines[index].split('|')[1])
except Exception, e:
print e
dic_list = iter(final_list)
dic = dict(zip(dic_list, dic_list))
print dic