我是Python新手。
我有一个程序,将温湿度值保存到文本文件中。我不知道如何检索任何保存的值(然后我将使用这些值与当前的温湿度读数进行比较)。
数据以这种格式保存。
22:48
23:49
24:52我想检索第一行,并将它们转换为两个变量(温度和湿度)。这是我所得到的,但它只是返回值2。我会非常感谢任何建议。
mylines = []
with open ('log.txt','r') as myfile:
for myline in myfile:
mylines.append(myline)
mylines[0].split(':')
print(mylines[0][1])发布于 2022-06-14 07:57:33
您需要分配split的结果,因为它不会发生变异。您可以对整个数组执行如下操作:
with open ("log.txt", "r") as myfile:
for myline in myfile:
mylines.append(myline.split(":"))
print(mylines[0][1]) # This should now print '48'或者对于你的具体例子:
mylines[0] = mylines[0].split(":")进一步制作temp和humidity数组也相当简单:
temp = []
humidity = []
with open ("log.txt", "r") as myfile:
for myline in myfile:
t, h = list(map(int, myline.split(":")))
temp.append(t)
humidity.append(h)发布于 2022-06-14 08:02:53
如果您只想要文件中第一行的值,并且想必希望它们是整数,那么:
with open('log.txt') as th:
temp, humidity = map(int, next(th).split(':'))
print(temp, humidity)输出:
22 48发布于 2022-06-14 08:21:45
如前所述,杰克的解决方案会很好。也许值得利用一些库,让自己熟悉字典--它们很棒,然后再去探索数据仓库。
import csv
text_file = r"C:\Path\To\Text\File.txt"
header = ["temp", "humidity"]
with open(text_file, mode="r") as f: # mode="r" for readonly
reader = csv.reader(f, delimiter=":") # Telling the csv module we want to use ":" as our delimiter
dict_from_file = [dict(zip(header, list(row))) for row in reader]因此,我们已经在一个单独的列表中声明了标题。如果需要的话,您可以从文本文件的第一行抓取,但是当然需要修改上面的内容。
然后dict(zip())将文件中每一行的列表“头”和列表“行”组合起来。zip()名义上输出元组对,然后我们使用dict()将其转换为字典对。
这将为您提供以下(列表)输出:
[
{'temp': '22', 'humidity': '48'},
{'temp': '23', 'humidity': '49'},
{'temp': '24', 'humidity': '52'},
]希望对你有帮助。
编辑:实际上有一种使用csv库的更整洁的方法--重用上面声明的text_file和报头.
dict_from_file = []
with open(text_file, mode="r") as f:
reader = csv.DictReader(f, header, delimiter=":")
for row in reader:
dict_from_file.append(row)https://stackoverflow.com/questions/72613345
复制相似问题