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之入门(五)缩进和选择
May 27 Python
Python实现的HTTP并发测试完整示例
Apr 23 Python
python下MySQLdb用法实例分析
Jun 08 Python
Flask框架的学习指南之用户登录管理
Nov 20 Python
python实现rsa加密实例详解
Jul 19 Python
Python实现多进程的四种方式
Feb 22 Python
python 修改本地网络配置的方法
Aug 14 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
django中嵌套的try-except实例
May 21 Python
keras在构建LSTM模型时对变长序列的处理操作
Jun 29 Python
运行python提示no module named sklearn的解决方法
Nov 29 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
php更新mysql后获取改变行数的方法
2014/12/25 PHP
yii数据库的查询方法
2015/12/28 PHP
php 猴子摘桃的算法
2017/06/20 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
cloudgamer出品ImageZoom 图片放大效果
2010/04/01 Javascript
JavaScript随机排序(随即出牌)
2010/09/17 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
jQuery使用animate创建动画用法实例
2015/08/07 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
windows下vue.js开发环境搭建教程
2017/03/20 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
详解javascript 变量提升(Hoisting)
2019/03/12 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
vue 取出v-for循环中的index值实例
2019/11/09 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
在Python中使用PIL模块处理图像的教程
2015/04/29 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
Django的models中on_delete参数详解
2019/07/16 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
html5本地存储 localStorage操作使用详解
2016/09/20 HTML / CSS
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
六十大寿答谢词
2014/01/12 职场文书
房屋出售授权委托书
2014/10/12 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
公司开会通知
2015/04/20 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
python基础详解之if循环语句
2021/04/24 Python
MySQL 视图(View)原理解析
2021/05/19 MySQL
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python