https://www.bilibili.com/video/av77410524?p=29

python 读日志 python读取windows日志_字符串

 

计算传感器日志文件中温度数据的平均值 

  • 日志文件包含1万条数据
  • 温度数据在文件的第3列
  • 输入:日志文件 sensor-data.txt
  • 输出:平均温度数值,保留小数点两位

 

python 读日志 python读取windows日志_日志文件_02

python 读日志 python读取windows日志_python 读日志_03

ls = line.split() 这一行代码的作用是将每一行的元素以空格分开,并存放到一个列表中

 

注意事项:

python相比其他编程语言 

  • 每行后没有分号。
  • 没有begin,end,{ }等表示代码归属的元素,只用缩进表达代码的所属关系。
  • 变量直接使用,无需类型声明。
  • open()、close()、split()等基本函数和方法直接使用,无需引用。 

python 读日志 python读取windows日志_日志文件_04

python 读日志 python读取windows日志_字符串_05

 

python 读日志 python读取windows日志_python 读日志_06

 文件的打开模式

r  :只读模式,默认值,如果文件不存在,返回FileNotFoundError

w : 覆盖写模式,文件不存在则创建,存在则完全覆盖

  • f = open('t1.txt','r')  #只读模式打开文件
  • f = open('t1.txt','w')  #覆盖写模式打开文件

将文件全部读入以字符串形式保留 

f.read() 一次性读入到字符串txt中

文件的全文读入

一次性全部读入文本

f = open("f.txt","r")

txt = f.read()

#对全文txt进行处理

f.close()

文件按行读入文本

f= open("f.txt","r")

for line in f:

    #每行文本保存在line中,可逐行处理。

f.close()

 

第二部分 循环语句

   python包括两种循环:遍历循环  无限循环

  • 遍历循环  :由for和in组成,从遍历结构中逐一获得元素进行循环
  • 无限循环:使用while关键字,由条件控制循环过程

 

python 读日志 python读取windows日志_数据_07

 

python 读日志 python读取windows日志_字符串_08

 

python 读日志 python读取windows日志_python 读日志_09

python 读日志 python读取windows日志_日志文件_10

python 读日志 python读取windows日志_日志文件_11

try中的代码如果出现错误,那么就会执行except下面的代码

如果没有出错,那么程序正常执行,就不会执行except部分的代码

python 读日志 python读取windows日志_python 读日志_12

avg计算数据的和

cnt计算日志文件的行数

avg/cnt 获得平均温度

#文件按行读入
f= open("f.txt","r")

for line in f:

    #每行文本保存在line中,可逐行处理。

f.close()

字符串的split()方法

split()方法:能够根据空格分隔字符串,结果保存到列表变量中

ls = "1 2 3 4 5 6 7".split()

print(ls)  #['1','2','3','4','5','6','7']

修改这个代码,尝试获得光照、电压的平均值

#sensor_reader.py
#读取日志文件代码
try:
    f = open("sensor_data.txt","r")
	avg, count=0, 0
	voltage = 0
	light = 0
	for line in f:
	    ls = line.split()
		count += 1
		avg += ls[2]
		voltage += ls[-1]
		light += ls[-2]
    print("平均温度值是:{:.2f}".format(avg/count))
	print("平均光照是:{:.2f}".format(light/count))
	print("平均voltage是:{:.2f}".format(voltage/count))
	f.close()

except:
    print("文件打开错误")