Python如何从文本文件读取数值拆分赋值给温湿度变量
问题根因
你运行代码只返回2的原因有两个:
- 字符串的
split(':')方法不会修改原始字符串,执行后会返回分割完成的新列表,你没有把这个返回结果赋值给变量,这行split调用等于没有生效 mylines[0]是读入的第一行原始字符串(内容为"22:48\n"),直接写mylines[0][1]是取字符串的第二个字符,也就是第一个'2'后面的字符'2',自然只会输出2。
可直接运行的正确代码
如果只需要读取第一行的历史温湿度,不需要把整个文件的所有行都存入列表,直接读取第一行处理即可,注意要把读出来的字符串转成数值类型,方便后续和新采集的读数做对比:
with open('log.txt', 'r', encoding='utf-8') as f: # 读第一行,同时去掉行尾的换行符、多余空格 first_line = f.readline().strip() # 按冒号分割后转成整数,分别赋值给两个变量 temp, humidity = map(int, first_line.split(':')) # 打印验证结果 print(f"历史温度:{temp}℃,历史湿度:{humidity}%")
如果你后续还要用到其他行的历史记录,想保留原来逐行读入列表的逻辑,只需要修改分割赋值的部分即可:
mylines = [] with open ('log.txt','r', encoding='utf-8') as myfile: for myline in myfile: # 逐行读入时就去掉换行符,减少后续处理步骤 mylines.append(myline.strip()) # 接收split的返回结果,再转成数值 line_parts = mylines[0].split(':') temp = int(line_parts[0]) humidity = int(line_parts[1]) print(temp, humidity)
提示:如果你存储的温湿度是带小数的数值,把代码里的
int替换成float就可以正常转换。
内容的提问来源于stack exchange,提问作者JulianJ
相关产品推荐
相关产品推荐

