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


Posted in Python onJanuary 30, 2019

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

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

生成h_dic.pkl文件信息

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文件信息

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

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

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#

运行情况

root@kali:~/python/snmp# python m_handle.py
192.168.72.129 1007
root@kali:~/python/snmp#

运行情况2

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程序设计有所帮助。

Python 相关文章推荐
Python守护进程用法实例分析
Jun 04 Python
Python采用Django开发自己的博客系统
Sep 29 Python
Python处理PDF及生成多层PDF实例代码
Apr 24 Python
python爬虫入门教程--利用requests构建知乎API(三)
May 25 Python
Python中read()、readline()和readlines()三者间的区别和用法
Jul 30 Python
django模板语法学习之include示例详解
Dec 17 Python
python实现多线程网页下载器
Apr 15 Python
详解python3中tkinter知识点
Jun 21 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
python批量修改图片尺寸,并保存指定路径的实现方法
Jul 04 Python
Pycharm 安装 idea VIM插件的图文教程详解
Feb 21 Python
python识别围棋定位棋盘位置
Jul 26 Python
python实现烟花小程序
Jan 30 #Python
Python面向对象程序设计示例小结
Jan 30 #Python
python实现浪漫的烟花秀
Jan 30 #Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 #Python
python+selenium 定位到元素,无法点击的解决方法
Jan 30 #Python
解决Python selenium get页面很慢时的问题
Jan 30 #Python
对python实现模板生成脚本的方法详解
Jan 30 #Python
You might like
杏林同学录(八)
2006/10/09 PHP
php中看实例学正则表达式
2006/12/25 PHP
PHP使用正则表达式清除超链接文本
2013/11/12 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
学习php中的正则表达式
2014/08/17 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
JS中style属性
2006/10/11 Javascript
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
jQuery预加载图片常用方法
2015/06/15 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
JS字符串常用操作方法实例小结
2019/06/24 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
Python垃圾回收机制三种实现方法
2020/04/27 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
python opencv 实现读取、显示、写入图像的方法
2020/06/08 Python
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
工作岗位说明书模板
2014/05/09 职场文书
团队精神的演讲稿
2014/05/14 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
初中同学会致辞
2015/08/01 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL