Python菜鸟编程第九课之时间序列化模块

Python菜鸟编程第九课之时间、序列化模块

1.Time模块

用法:导入time模块即可。

import time

time中的常用函数:

函数名描述
time.sleep(n)线程推迟指定的时间运行,单位秒
time.time()返回当前时间戳,表示的是从1970-01-01 00:00:00 开始按秒计算的偏移量
time.localtime(sec)加一个时间戳转化为一个当前时区的struct_time(默认为当前时间)
time.gmtime(sec)将一个时间戳转化为UTC时区的struct_time(默认为当前时间)
time.mktime(t)将time.struct_time转化为时间戳
time.asctime(t)将表时间的元组或struce_time表示为:“Sun July 09:06:35 2019”;默认为time.localtime()
time.ctime(t)把一个时间戳转化为time.asctime()的形式。如果未传参,默认time.time()
time.strftime(format[,t])把一个代表时间的元组struct_time(localtime()、gmtime())转化为格式化的字符串,默认为time.localhost())
time.strptime()将结构化字符串转化为strct_time形式

在Python中,表示时间通常有3种方式。

  1. 时间戳(time.time()),机器识别的。
  2. 格式化的时间字符串(format string),人类可以看的。
python中时间日期格式化符号描述
%y两位数的年份表示(00-99)
%Y四位数的年份表示(000-9999)
%m月份(01-12)
%d月内中的一天(0-31)
%H24小时制小时数(0-23)
%I12小时制小时数(01-12)
%M分钟数(00=59)
%S秒(00-59)
%a本地简化星期名称
%A本地完整星期名称
%b本地简化的月份名称
%B本地完整的月份名称
%c本地相应的日期表示和时间表示
%j年内的一天(001-366)
%p本地A.M.或P.M.的等价符
%U一年中的星期数(00-53)星期天为星期的开始
%w星期(0-6),星期天为星期的开始
%W一年中的星期数(00-53)星期一为星期的开始
%x本地相应的日期表示
%X本地相应的时间表示
%Z当前时区的名称
%%%号本身
  1. 结构化的时间(struct_time),返回一个有9个元素的元组(年,月,日,时,分,秒,一年的第几周,一年的第几天,夏令时)对时间操作。

demo1:

#time.time()
import time
print(time.time())
运行结果:
1564102854.4548235

demo2:

import time
nowtime=time.time()
print(nowtime)
print(time.gmtime(nowtime))#UTC时间,0时区
print(time.localtime())#当地时间
运行结果:
1564103927.8606992
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=1, tm_min=18, tm_sec=47, tm_wday=4, tm_yday=207, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=9, tm_min=20, tm_sec=26, tm_wday=4, tm_yday=207, tm_isdst=0)

demo3:

#时间形式的相互转换
tp=time.localtime()
print(tp)
print(time.mktime(tp))#结构化时间转化为时间戳
print(time.strftime('%Y-%m-%d %X',tp))#结构化时间转化为字符串时间格式
print(time.strptime('2019-07-26 09:27:29','%Y-%m-%d %H:%M:%S'))#将字符串格式时间转化为结构化时间
print(time.asctime(tp))
print(time.ctime())#把时间戳转化为asctime()的形式
运行结果:
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=9, tm_min=27, tm_sec=29, tm_wday=4, tm_yday=207, tm_isdst=0)
1564104449.0
2019-07-26 09:27:29
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=9, tm_min=27, tm_sec=29, tm_wday=4, tm_yday=207, tm_isdst=-1) 
Fri Jul 26 09:27:29 2019
Fri Jul 26 09:27:29 2019

2.Datatime模块

相对于time模块来说,datetime模块更加直观,容易调用

函数名描述
datetime.date表示日期(类),常用属性year,month,day
datetime.time表示时间(类),常用属性hour,minute,second,microsecond
datetime.datetime表示日期
datetime.timedelta表示时间间隔
datetime.tzinfo与时区有关的信息

demo1:

import datetime
print(datetime.datetime.now())
print(datetime.datetime.now().date())
print(datetime.datetime.now().time())
运行结果:
2019-07-26 10:07:03.128478
2019-07-26
10:07:03.128478

demo2:

import datetime
print(datetime.datetime.now()+datetime.timedelta(-1))#当前时间减一天
print(datetime.datetime.now()+datetime.timedelta(hours=1))#当前时间加一个小时
运行结果:
2019-07-25 10:46:48.617439
2019-07-26 11:46:48.617439

3.Sys模块

sys模块是与Python解释器交互的一个接口。

demo:

  • 在任意一个文件夹中新建一个test1.py的文件
  • 在test1.py中输入:
def foo():
    print('ss')

在运行文件中输入:

sys.path.append('D:/PyCharm/BClass/PXClass/2019-7-25')#这里添加的是test1.py的文件
# test1.foo
print(sys.path)
import test1
test1.foo()
运行结果:
['D:\\PyCharm\\BClass\\PXClass\\2019-7-26', 'D:\\PyCharm\\BClass', 'D:\\anaconda\\anaconda\\python37.zip', 'D:\\anaconda\\anaconda\\DLLs', 'D:\\anaconda\\anaconda\\lib', 'D:\\anaconda\\anaconda', 'D:\\anaconda\\anaconda\\lib\\site-packages', 'D:\\anaconda\\anaconda\\lib\\site-packages\\win32', 'D:\\anaconda\\anaconda\\lib\\site-packages\\win32\\lib', 'D:\\anaconda\\anaconda\\lib\\site-packages\\Pythonwin', 'D:\\PyCharm\\PyCharm 2018.2.3\\helpers\\pycharm_matplotlib_backend', 'D:/PyCharm/BClass/PXClass/2019-7-25']
ss

demo:

import sys
print(sys.byteorder)#显示本地字节规则的指示器,big-endian平台的值是'big',little-endian平台的值是'little'
print(sys.copyright)#显示记录python版权相关的东西
print(sys.executable)#显示python解释器在磁盘上的路径
print(sys.getfilesystemencoding())#当前系统上保存文件使用的字符集
print(sys.maxsize)#显示Python中支持的最大整数
print(sys.platform)#显示当前Python所在平台
print(sys.version)#返回当前Python解释器的版本信息
运行结果:
little
Copyright (c) 2001-2018 Python Software Foundation.
All Rights Reserved.

Copyright (c) 2000 BeOpen.com.
All Rights Reserved.

Copyright (c) 1995-2001 Corporation for National Research Initiatives.
All Rights Reserved.

Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.
All Rights Reserved.
D:\anaconda\anaconda\python.exe
utf-8
9223372036854775807
win32
3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)]

4.序列化模块

概念:将一个对象从内存转化为可储存(字符串类型)或者可传输(bytes)类型的过程。

Python中交pickling.

为什么要是有序列号?

  • 跨久化数据使用
  • 跨平台交互使用
  • 使程序更容易维护

4.1Json

json格式在各个语言中都可以通用序列号格式。在json中,所有字符串必须为“”。

Json类型Python类型
{}dict
[]list
“string”str
1234.56int/float
true/falseTrur/False
nullNone

json优缺点:

优点缺点
所以的数据类型是各语言通用的json只支持列表,字典,数值,字符串和布尔值
对数据要求非常严格
key值必须是可哈希

四个功能:

  • dumps。json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为字符串)
  • dump。把数据类型转换成字符串并存储在文件中
  • loads。json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典)
  • load。把文件打开从字符串转换成dict数据类型

demo1:

如果是元组,序列化是强转为列表,若元组为字典的键,序列化时报错。

#序列号
import json
dic={'name':'city','age':180}
sr_dic=json.dumps(dic)=#序列化,将字典转换为字符串
print(type(sr_dic))
print(sr_dic)
print(dic)
d1={'seq':(1,2,3)}
s_d1=json.dumps(d1)#会将字典中元组自动转为列表
print(s_d1)

运行结果:
<class 'str'>
{"name": "city", "age": 180}
{'name': 'city', 'age': 180}
{"seq": [1, 2, 3]}

demo2:

#反序列化
dic_2=json.loads(sr_dic)
print(type(dic_2))
print(dic_2)
运行结果:
<class 'dict'>
{'name': 'city', 'age': 180}

如果把数据类型直接序列化写入文件中,可以用dump和load

demo3:

import json
dic={'name':'city','age':180}
with open('dump_json.txt','w')as f:
    json.dump(dic,f)#dump方法可以接收一个文件句柄。直接将字典转换成字符串,写入文件中

with open('dump_json.txt','r')as f:
    ret=json.load(f)
    print(ret,type(ret))
运行结果:
{'name': 'city', 'age': 180} <class 'dict'>

4.2Pickle

pickle只用于Python。

内存中结构化的数据,格式pickle,bytes类型,保存在文件或基于网络网络传输

pickle优缺点:

优点缺点
支持Python中的几乎所有类型只支持Python
pickle会把数据类型序列化成bytes类型

模块提供的四个功能:

  • 序列化:

    dumps。pickle.dumps()函数是将一个Python数据类型列表进行pickle格式的编码(可以这么理解,pickle.dumps()函数是将字典转化为二进制数据)

    dump。把数据类型转换成二进制并存储在文件中

  • 反序列化:

    loads。pickle.loads()函数是将pickle格式数据转换为字典(可以这么理解,pickle.loads()函数是将二进制数据转化为字典)

    load。把文件打开从二进制转换成dict数据类型

demo1:

import pickle
dic={'name':'city','age':20}
d_b=pickle.dumps(dic)#序列化
print(type(d_b))
print(d_b)
d1=pickle.loads(d_b)#反序列化
print(type(d1))
print(d1)
运行结果:
<class 'bytes'>
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00cityq\x02X\x03\x00\x00\x00ageq\x03K\x14u.'
<class 'dict'>
{'name': 'city', 'age': 20}

demo2:

#因为是二进制文件操作,所以,打开文件时的权限都应该加b
import pickle
dic={'name':'city','age':20}
with open('picktest.txt','wb') as f:
    pickle.dump(dic,f)
with open('picktest.txt','rb') as f:
    qq=pickle.load(f)
    print(qq,type(qq))
运行结果:
{'name': 'city', 'age': 20} <class 'dict'>

博主QQ:1031748759,欢迎批评指正!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值