您的位置:首页 > 脚本大全 > > 正文

python代码如何进行切片索引(Python读取Pickle文件信息并计算与当前时间间隔的方法分析)

更多 时间:2022-04-01 01:04:45 类别:脚本大全 浏览量:2201

python代码如何进行切片索引

Python读取Pickle文件信息并计算与当前时间间隔的方法分析

本文实例讲述了Python读取Pickle文件信息并计算与当前时间间隔的方法。分享给大家供大家参考,具体如下:

python—–读取Pickle文件信息计算出与当前的时间间隔

生成h_dic.pkl文件信息

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • root@kali:~/python/snmp# cat snmpserver.py
  • #!/usr/bin/python
  • # --*-- coding:utf-8 --*--
  • import datetime#导入时间戳
  • import SocketServer
  • import pickle
  • pfile = 'h_dic.pkl'#定义pickle文件,并生成h_dic.pkl文件
  • #读取目录下的celie.txt文件
  • host_status = {}#新建字典,使用IP地址作为KEY值。作用是来判断每个客户端IP多久与服务器通信一次的
  • f = open('celie.txt')#调用策略文档,在里面的ip地址就可以通过,并发送信息
  • while True:
  •   line = f.readline().split()
  •   if len(line) == 0:break
  •   print line[0]#打印第一个IP地址信息
  •   host_status[line[0]] = []#给字典第一个设置为空,这样后面只要直接追加值就ok了
  • f.close()
  • class myMonitorHandler(SocketServer.BaseRequestHandler):
  •   '''This is the Monitor server'''
  •   def handle(self):
  •     recv_data = self.request.recv(1024)#接收客户端数据
  •     if self.client_address[0] == '192.168.72.130':#如果IP为本机IP地址,就重新写入pickle文件信息
  •       f2 = file(pfile,'w')#使用pickle模块可写模式打开文件f2
  •       pickle.dump(host_status,f2)#使用pickle带参数为字典名与文件名
  •       f2.close()#关闭文件f2
  •     if self.client_address[0] in host_status.keys():#如果存在字典中的ip地址信息,就返回对应客户端发送的Ip、时间戳、信息
  •       #self.client_address为数组('192.168.72.129', 49109)的值。只要当中的IP地址,因此取self.client_address[0]
  •       #把host_status字典中的self.client_address[0]值即IP地址值赋值有两个值,因此新建个列表,存取两个值时间戳与接收的信息
  •       #如:{'192.168.72.129': [(datetime.datetime(2017, 8, 20, 21, 29, 59, 415054), 'up')]}
  •       #host_status[self.client_address[0]] = [(datetime.datetime.now(),recv_data)]
  •       #直接把元组append进字典
  •       host_status[self.client_address[0]].append((datetime.datetime.now(),recv_data))
  •       print 'From %s : %s %s' %(self.client_address,datetime.datetime.now(),recv_data)#打印客户端地址、操作的时间戳值与接收的数据
  •       #print host_status
  •     else:#不存在字典中,则如下提示信息
  •       print "sorry, ip %s is not in the monitor list" % self.client_address[0]
  •     #打印出192.168.72.129 [(datetime.datetime(2017, 8, 20, 22, 1, 6, 705498), 'up')]
  •     for t,m in host_status.items():
  •       print t,m
  • if __name__ == "__main__":#当自己运行时调用什么什么;当被其他程序调用时调用什么什么,如果被其他程序调用了,下面代码不执行
  •   host,port = '',18000
  •   server = SocketServer.ThreadingTCPServer((host,port),myMonitorHandler)#调用TCP的多线程
  •   server.serve_forever()
  • root@kali:~/python/snmp#
  • pickle文件信息

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • root@kali:~/python/snmp# ls
  • celie.txt h_dic.pkl m_handle.py snmpclient2.py snmpserver.py tab.py tab.pyc
  • root@kali:~/python/snmp# cat h_dic.pkl
  • (dp0
  • S'192.168.72.129'
  • p1
  • (lp2
  • (cdatetime
  • datetime
  • p3
  • (S'\x07\xe1\x08\x16\x149\x1b\x02\xd0F'
  • p4
  • tp5
  • Rp6
  • S'up'
  • p7
  • tp8
  • a(g3
  • (S'\x07\xe1\x08\x16\x149#\x03\xeag'
  • p9
  • tp10
  • Rp11
  • S'up'
  • p12
  • tp13
  • a(g3
  • (S'\x07\xe1\x08\x16\x149*\x01Fd'
  • p14
  • tp15
  • Rp16
  • S'up'
  • p17
  • tp18
  • a(g3
  • (S"\x07\xe1\x08\x16\x14:'\x06\x9di"
  • p19
  • tp20
  • Rp21
  • S'up'
  • p22
  • tp23
  • a(g3
  • (S'\x07\xe1\x08\x16\x15\x0c\x16\x00=\x9f'
  • p24
  • tp25
  • Rp26
  • S'up'
  • p27
  • tp28
  • a(g3
  • (S'\x07\xe1\x08\x16\x15\x0c\x16\te\x8c'
  • p29
  • tp30
  • Rp31
  • S'up'
  • p32
  • tp33
  • as.root@kali:~/python/snmp#
  • 调用h_dic.pkl文件m_handle.py的代码

    运行情况1

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • root@kali:~/python/snmp# cat m_handle.py
  • #!/usr/bin/python
  • # --*-- coding:utf-8 --*--
  • from datetime import datetime#导入时间模块
  • import pickle#导入pickle模块
  • f = file('h_dic.pkl','rb')#使用rb读取模式打开pickle文件
  • host_status = pickle.load(f)#使用pickle的load方式打开文件,变成字典
  • for h,m in host_status.items():#在字典中循环元素
  •   if len(m) != 0:#如果时间值不为空,则进入
  •     print h,m[-1]
  • root@kali:~/python/snmp# python m_handle.py
  • 192.168.72.129 (datetime.datetime(2017, 8, 22, 21, 12, 22, 615820), 'up')
  • root@kali:~/python/snmp#
  • 运行情况2

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • root@kali:~/python/snmp# cat m_handle.py
  • #!/usr/bin/python
  • # --*-- coding:utf-8 --*--
  • from datetime import datetime#导入时间模块
  • import pickle#导入pickle模块
  • f = file('h_dic.pkl','rb')#使用rb读取模式打开pickle文件
  • host_status = pickle.load(f)#使用pickle的load方式打开文件,变成字典
  • for h,m in host_status.items():#在字典中循环元素
  •   if len(m) != 0:#如果时间值不为空,则进入
  •     old_time = m[-1][0]#取时间值出来
  •     print h,(datetime.now() - old_time).seconds#打印主机ip,当前时间减去从pickle文件中读取的值
  • root@kali:~/python/snmp#
  • 运行情况

  • ?
  • 1
  • 2
  • 3
  • root@kali:~/python/snmp# python m_handle.py
  • 192.168.72.129 1007
  • root@kali:~/python/snmp#
  • 运行情况2

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • root@kali:~/python/snmp# cat m_handle.py
  • #!/usr/bin/python
  • # --*-- coding:utf-8 --*--
  • from datetime import datetime#导入时间模块
  • import pickle#导入pickle模块
  • f = file('h_dic.pkl','rb')#使用rb读取模式打开pickle文件
  • host_status = pickle.load(f)#使用pickle的load方式打开文件,变成字典
  • for h,m in host_status.items():#在字典中循环元素
  •   if len(m) != 0:#如果时间值不为空,则进入
  •     old_time = m[-1][0]#取时间值出来
  •     time_diff = (datetime.now() - old_time).seconds#当前时间减去从pickle文件中读取的值,为时间差值
  •     if time_diff > 30:#如果时间差大于30秒,则进入
  •       print 'No data received from %s for %s ,please check!' %(h,time_diff)
  •     else:
  •       print h,(datetime.now() - old_time).seconds#打印主机ip,时间差值
  • root@kali:~/python/snmp#
  • root@kali:~/python/snmp# python m_handle.py
  • No data received from 192.168.72.129 for 494 ,please check!
  • root@kali:~/python/snmp#
  • 希望本文所述对大家Python程序设计有所帮助。

    原文链接:https://blog.csdn.net/xwbk12/article/details/77488017

    您可能感兴趣