美文网首页python入门基础
第五章 文件的输入和输出

第五章 文件的输入和输出

作者: 程序员学习库 | 来源:发表于2019-01-13 17:39 被阅读0次

作者:村里有个男孩叫小方

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()

数据百度云:链接:https://pan.baidu.com/s/18stiiHnHfWEr3ZlSfAG8LA
提取码:n9nz

 福利时间 :关注微信公众号:chengxuyuanxiaofang 
 获取免费的python嵌入式java等各类资料
 有什么问题欢迎留言
微信公众号

相关文章

网友评论

    本文标题:第五章 文件的输入和输出

    本文链接:https://www.haomeiwen.com/subject/ildldqtx.html