Python数据处理(2) —16进制文本数据处理

1. 本节讲解

利用Python程序语言解析攀藤PM2.5传感器G5003存储的16进制的文本文件。

2. 原始数据

图片

**3. 实现思路 **

根据攀藤相关产品型号手册,可知16进制文本所代表的含义。首先,通过方括号符号 "[**** ****]" **获取有效时间信息及16进制格式的数据序列;其次,以空格" "**对16进制数据串进行拆分,将每一字节根据手册对应到相应位置,并做统一处理。

4. 工程文件(2018030521583350.zip

核心代码如下:

# -*- coding: utf-8 -*-
"""
Created on Thu Dec  7 11:02:53 2017

@author: jack
"""

import time
import matplotlib.pyplot as plt

#读取的txt文件, G5003传感器
fileName = 'PTCOM52.txt'

#绘图所需数据
xtime = []
yvalue = []

#定义PM1/PM2.5/PM10标准颗粒物和大气颗粒物
sPM1 = []
sPM2_5  = []
sPM10  = []
PM1 = []
PM2_5  = []
PM10  = []

#读取包含攀藤传感器数据的txt文本
for line in open(fileName):

    #截取时间数值
    end = line.find(']')

    try:
        xtimestamp = time.mktime(time.strptime(line[1:end],"%Y:%m:%d:%H:%M:%S"))

        #以空格拆分字符串作为数据
        array = line[end+1:].strip().split(' '); 

        #判断数据是否符合规则,针对G5003传感器
        if(len(array)) == 32:

            xtime.append(xtimestamp)      #存储时刻

            data = int(array[4],16)*256+ int(array[5],16)   #标准PM1.0 
            sPM1.append(data)   

            data = int(array[6],16)*256+ int(array[7],16)   #标准PM2.5
            sPM2_5.append(data)

            data = int(array[8],16)*256+ int(array[9],16)   #标准PM10
            sPM10.append(data)

            data = int(array[10],16)*256+ int(array[11],16)  #大气环境PM1.0 
            PM1.append(data)   

            data = int(array[12],16)*256+ int(array[13],16)  #大气环境PM2.5
            PM2_5.append(data)

            data = int(array[14],16)*256+ int(array[15],16)  #大气环境PM10
            PM10.append(data)

    except ValueError:
        continue;         

#将数据存到新的列表
yvalue.append(sPM1) 
yvalue.append(sPM2_5)
yvalue.append(sPM10)  
yvalue.append(PM1) 
yvalue.append(PM2_5)
yvalue.append(PM10)  

#将字符串转为整型数据
deta = int(xtime[0])
for j in range(len(xtime)):
    xtime[j] = int(xtime[j])-deta
    for i in range(len(yvalue)):
        yvalue[i][j] = int(yvalue[i][j])

#X和Y坐标信息
plt.xlabel("Time(s)")
plt.ylabel("Ug(PT_PM2.5)")  

#绘制曲线
for j in range(len(yvalue)):
    if j == 0:
        msg = "PT_sPM1.0"
    elif j == 1 :
        msg = "PT_sPM2.5"
    elif j == 2:
        msg = "PT_sPM10"
    elif j == 3:
        msg = "PT_PM1.0"
    elif j == 4:
        msg = "PT_PM2.5"
    else:
        msg = "PT_PM10"      
    plt.plot(xtime,yvalue[j],label=msg,linewidth=2)  

plt.legend()
plt.show()

5. 实验结果

图片

评论 (0)

暂无评论,快来抢沙发吧!

发表评论