作者:村里有个男孩叫小方
1 实验目的
掌握python 操作文件的内建函数(open read write close)
2 实验目标
完成对数据的分类(有一段json数据包的.txt数据,里面有电梯的实时运行数据,对这些电梯数据进行分类)
3 实验环境
win7操作系统
python2.7
4 实验步骤
4.1 了解内建函数
open() 打开文件
read() 输入
readline()输入一行
seek()文件内移动
write()输出
close()关闭文件
4.2 数据分析
通过我们的学习项目熟悉这些函数,具体如下:
1.分析如下数据
{
"croom_id": 3,
"device_id": "38002D000B51363530393030",
"date_dev": 1536748392,
"fault_type": 0,
"event_type": 0,
"action_status": 0,
"code": 0,
"lift_real_time": {
"floor_rfid": 20,
"floor": 120,
"distance": 21.959999,
"car_direction": 2,
"car_status": 1,
"service_mode": 1,
"online_status": 0,
"door_status": true,
"door_zone": true,
"passenger_status": true,
"speed": 1.573424,
"electric_current_a": 58.200001,
"electric_current_b": 66,
"electric_current_c": 64.019997,
"voltage_a": 224.600006,
"voltage_b": 224.600006,
"voltage_c": 224.699997,
"temperature_a": 37.200001,
"temperature_b": 37.799999,
"temperature_c": 37.400002,
"temperature_d": 37.799999,
"temperature_room": 37.799999,
"w": 300.600006
},
"mcuurlist": {
"flat_cnt": 0,
"car_safe": 0,
"car_ovh": 0,
"car_door": 0,
"car_motor": 0,
"car_flayer": 0,
"car_cpbutton": 0,
"car_haspeo": 1,
"room_safe": 0,
"room_em": 1,
"room_ovh": 0,
"room_hdoor": 0,
"room_cardoor": 0,
"room_firectr": 0,
"car_time": 1536748391,
"room_time": 1536748392,
"max_speed": 1.573424,
"self_en": 0,
"self_ex": 0,
"sensor_e": 0
},
"acclist": {
"accx": 8.036133,
"accy": 0.020508,
"accz": 1.014648,
"palx": -11.108398,
"paly": 17.639160,
"palz": 26.000977,
"roll": 0,
"pitch": 0,
"yall": 0,
"temp": 48.930000,
"press": 99908,
"car_speed": -1.087188,
"car_height": 23.790001
},
"sign": "15504059f949afe0c28c531bbfb5095e"
}
------------------cloud_message_recv_cb----------------
HTTP POST success code = 1 carid = 38002D000B51363530393030
--------- Http Response /lift/deviceData/addLiftRealTimeData.do ---------
73:{"code":1,"msg":"鎿嶄綔鎴愬姛","data":{"id":"38002D000B51363530393030"}}U
------------------cloud_message_recv_cb----------------
=========================== JSON [1446] ===========================
{
"croom_id": 4,
"device_id": "320027001847373032303434",
"date_dev": 1536748392,
"fault_type": 0,
"event_type": 0,
"action_status": 0,
"code": 0,
"lift_real_time": {
"floor_rfid": 13,
"floor": 120,
"distance": 45.591000,
"car_direction": 0,
"car_status": 1,
"service_mode": 1,
"online_status": 0,
"door_status": true,
"door_zone": true,
"passenger_status": true,
"speed": 0,
"electric_current_a": 58.200001,
"electric_current_b": 66,
"electric_current_c": 64.019997,
"voltage_a": 224.600006,
"voltage_b": 224.600006,
"voltage_c": 224.699997,
"temperature_a": 37.200001,
"temperature_b": 37.799999,
"temperature_c": 37.400002,
"temperature_d": 37.799999,
"temperature_room": 37.799999,
"w": 300.600006
},
"mcuurlist": {
"car_safe": 0,
"car_ovh": 0,
"car_door": 0,
"car_motor": 0,
"car_flayer": 1,
"car_cpbutton": 0,
"car_haspeo": 1,
"room_safe": 0,
"room_em": 1,
"room_ovh": 0,
"room_hdoor": 0,
"room_cardoor": 0,
"room_firectr": 0,
"car_time": 1536748391,
"room_time": 1536748392,
"max_speed": 0,
"self_en": 0,
"self_ex": 0,
"sensor_e": 0
},
"acclist": {
"accx": 1.059082,
"accy": -0.015137,
"accz": 1.124023,
"palx": 0.366211,
"paly": 0.549316,
"palz": 0.183105,
"roll": 0,
"pitch": 0,
"yall": 0,
"temp": 52.190000,
"press": 100211,
"car_speed": 0,
"car_height": 44.849998
},
"sign": "c127837e82cc019bcd897c993d7a57bf"
}
HTTP POST success code = 1 carid = 320027001847373032303434
--------- Http Response /lift/deviceData/addLiftRealTimeData.do ---------
73:{"code":1,"msg":"鎿嶄綔鎴愬姛","data":{"id":"320027001847373032303434"}}U
------------------cloud_message_recv_cb----------------
------------------cloud_message_recv_cb----------------
=========================== JSON [1487] ===========================
上面是一小段电梯运行时的实时数据,更多的数据存在elevatordata.txt里我们的目标是把不同的"croom_id"进行分类,数据里一共有5个croom_id,分别是12345,我们要把数据写入到新的1.txt,2.txt,3.txt,4.txt, 5.txt里面。从数据中可以看出每个数据包一共有76行(包括两个括号),所以,当我们读到括号时,就获取后面的76行,写入不通的文件当中
4.3具体实现代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
#以可读可写的方式打开5个文件
'''
模式 可做操作 若文件不存在 是否覆盖
r 只能读 报错 -
r+ 可读可写 报错 是
w 只能写 创建 是
w+ 可读可写 创建 是
a 只能写 创建 否,追加写
a+ 可读可写 创建 否,追加写
'''
#读取
alldata = open("elevatordata.log",'rb')
#写入
data1 = open("1.log",'a')
data2 = open("2.log",'a')
data3 = open("3.log",'a')
data4 = open("4.log",'a')
data5 = open("5.log",'a')
def str_to_hex(s):
return ' '.join([hex(ord(c)).replace('0x', '') for c in s])
Separate = 0
strdata = ""
startflag = 0
str ="{"
for data in alldata.readlines():
if data[0] == "{":
startflag = 1
if startflag == 1:
if data[0] != "}":
if "\"croom_id\"" in data:
try :
#利用正则表达式获取(正则表达式以后会讲)
num = re.findall(r'(\w*[0-9]+)\w*',data) #数据有时会发生错误
Separate = int(num[0])
except IndexError:
pass
strdata = strdata + data
else :
strdata = strdata + data
startflag = 0
#print strdata #获取到所有的str了
if Separate == 1:
data1.write(strdata)
if Separate == 2:
data2.write(strdata)
if Separate == 3:
data3.write(strdata)
if Separate == 4:
data4.write(strdata)
if Separate == 5:
data5.write(strdata)
strdata = ""
alldata.close()
data1.close()
data2.close()
data3.close()
data4.close()
data4.close()
福利时间 :关注微信公众号:chengxuyuanxiaofang
获取免费的python嵌入式java等各类资料
有什么问题欢迎留言
微信公众号