time sys json模块

Time 模块

导入

import time

常用函数

函数 功能
time.sleep([n]) 休眠n秒,线程推迟指定时间运行 (阻塞函数,程序将在此处停止)
time.time() 返回当前时间戳(1970.0 0点起)单位为秒(浮点型)
time.localtime([sec]) 将一个时间戳转化为一个当前时区的struct_time(未提供参数,为当前时间)
time.gmtime([sec]) 和localtime类似,区别为将时间戳转化为UTC时区(0时区)的struct_time
time.mktime(t) 将time.struct_time转化为时间戳
time.asctime([t]) 将时间的元组或struct_time 表示为:‘Sun(星期) July(月份) 26(日期) 09:10:02(时间) 2019(年份)’,未传参数,默认time.locatime()
time.ctime([t]) 把时间戳转化为time.asctime()的格式,默认time.time()
time.stftime(format[,t]) 把一个代表时间的元组/struct_time(locatime(),gmtime())转化为格式化字符串,未传参数,默认为time.localtime()
time.strptime() 将格式化字符串转换为struct_time的格式

在python中表示时间的方式:

  • 时间戳(timetamp):表示从1970.01.01 00:00:00开始按秒计算的偏移量,计算机识别
  • 格式化的时间字符串(format string),可以便于人获取时间
  • 结构化的时间(struct_time)---->结构元组,9个元素(年月日,时分秒,一年的第几周,第几天,夏令时),可以对时间操作
import time
print(time.time())
print(time.strftime('%Y-%m-%d %X %p'))
print(time.localtime()[:])
1564102814.5391111
2019-07-26 09:00:14 AM
(2019, 7, 26, 9, 0, 14, 4, 207, 0)

字符串时间的符号

符号 含义
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(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 当前时区的名称
%% %号本身

时间格式的转化

时间戳转化我结构化时间

import time
now=time.time()
print(time.gmtime(now))      ##0时区
print(time.localtime(now))	 ##当地时区(东八区)
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=1, tm_min=20, tm_sec=55, 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=55, tm_wday=4, tm_yday=207, tm_isdst=0)

结构化时间转化为时间戳

import time
sp_struct=time.localtime()
print(time.time(),time.mktime(sp_struct))
1564104250.1320517 1564104250.0

结构化时间转化为字符串时间

import time
tp_struct=time.localtime()
print(time.strftime('%Y-%m-%d %X',tp_struct))
2019-07-26 09:27:23

字符串时间转化为结构化数据

import time
print(time.strptime('2019-07-26 09:30:01','%Y-%m-%d %X'))
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=9, tm_min=30, tm_sec=1, tm_wday=4, tm_yday=207, tm_isdst=-1)

结构化时间及时间戳转换成字符串(另一形式)

import time
tp_struct=time.localtime()
print(time.asctime(tp_struct)) ##结构化时间
print(time.ctime(time.time())) ##时间戳
Fri Jul 26 09:49:21 2019
Fri Jul 26 09:49:21 2019

datetime 模块

与time模块比较而言,datetime模块接口更直观,更容易调用

方法(类) 描述
datetime.date 表示日期(类),常用属性 year month day
datetime.time 表示时间(类),常用属性 hour,minute,second,microsecond(微秒)
datetime.datetime 表示日期
datetime.timedelta 表示时间间隔
datetime.tzinfo 与时区有关的信息
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2019, 7, 26, 10, 4, 42, 700190)
>>> datetime.datetime.now().date()
datetime.date(2019, 7, 26)
>>> datetime.datetime.now().time()
datetime.time(10, 5, 30, 9043)
>>> print(datetime.datetime.now())
2019-07-26 10:05:50.047827
>>> print(datetime.datetime.now()+datetime.timedelta(hours=1)) #1小数以后
2019-07-26 11:07:17.392208

sys 模块

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

处理命令行参数

在解释器启动后,argv列表包含了传递脚本的所有参数,列表的第一个元素是脚本的名称

函数 作用(返回值)
byteorder python解释器有关的版本信息
copyright python解释器在磁盘的存储路径
executable 当前系统上保存文件所用的字符集
getfilesstemencoding python整数支持的最大值
maxsize python解释器所在版本信息
platform python解释器的版本信息
version python解释器的主版本号
>>> sys.version #python的版本
'3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)]'
>>> sys.path  #python的环境
['', 'D:\\python\\python3.7\\Lib\\idlelib', 'D:\\python\\python3.7\\python37.zip', 'D:\\python\\python3.7\\DLLs', 'D:\\python\\python3.7\\lib', 'D:\\python\\python3.7', 'D:\\python\\python3.7\\lib\\site-packages']
##第一个''表示当前的运行,由于在终端所有为空

通过sys.path.append(地址),可以添加一个.py文件到环境里,之后可以直接import调用

序列化模块

概念

将一个对象(数据)从内存中转换成可存储(字符串类型)或者可传输(bytes)类型的过程

python 中叫pickling

作用

  • 持久化数据类型
  • 跨平台交互使用
  • 使程序更易于维护

json

json格式在各个语言中都可以通用的序列化格式.在json中,所有的字符串只能使用""(双引号).

json类型 python类型
{} 字典(dict)
[] 列表(list)
123/1.1 int/float(数字)
true/false True/False(bool)
null None
优缺点
  • 优点:所有数据类型支持多种语言

  • 缺点

    • 支持数据类型较少
    • 对于数据类型要求严格
      • 对于字典,其键只能是字符串,非字符串(数字)会强转成字符串
      • 只支持字典,列表,数字,布尔型
功能
  • dumps loads
import json
dic={'name':"bob","age":16,"job":'student',2:'a'}
sr_dic=json.dumps(dic) ##序列化,将字典转化为一个字符串
print(sr_dic,type(sr_dic))
sr=json.loads(sr_dic)#反序列化,将字符串转化成一个字典
print(sr,type(sr))
{"name": "bob", "age": 16, "job": "student", "2": "a"} <class 'str'>
{'name': 'bob', 'age': 16, 'job': 'student', '2': 'a'} <class 'dict'>

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

  • dump load

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

import json
dic={'name':"bob","age":16,"job":'student',2:'a'}
with open('dump_json','w') as f:
    json.dump(dic,f)##dump方法可以接收一个文件句柄。直接将字典转化字符串并写入文件中

with open('dump_json') as f:
    ret=json.load(f)
    print(ret,type(ret))
{'name': 'bob', 'age': 16, 'job': 'student', '2': 'a'} <class 'dict'>

在与该.py文件同级生成了一个dump—json文件

{"name": "bob", "age": 16, "job": "student", "2": "a"}
#用txt打开该文件

json自带解码方式,如果内容含中文,会出现乱码,所有可以关闭其解码

import json
dic2={'名字':'bob','年龄':17}
print(json.dumps(dic2))
print(json.dumps(dic2,ensure_ascii=False))
{"\u540d\u5b57": "bob", "\u5e74\u9f84": 17}
{"名字": "bob", "年龄": 17}

pickle

该数据结构只支持python

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

优缺点
  • 优点

    • 支持python中几乎所有类型
    • pickle会把数据类型序列化为bytes类型
  • 缺点

    • 只支持python
功能
  • 序列化

    • dumps
    • dump
  • 反序列化a

    • loads
    • load

dumps和loads

import pickle
dic={"name": "bob", "age": 16, "job": "student", 2: "a"}
dic_d=pickle.dumps(dic)
print(dic_d,type(dic_d))
dic_l=pickle.loads(dic_d)
print(dic_l,type(dic_l))

b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x03\x00\x00\x00bobq\x02X\x03\x00\x00\x00ageq\x03K\x10X\x03\x00\x00\x00jobq\x04X\x07\x00\x00\x00studentq\x05K\x02X\x01\x00\x00\x00aq\x06u.' <class 'bytes'>  ###保存格式为2进制
{'name': 'bob', 'age': 16, 'job': 'student', 2: 'a'} <class 'dict'>

dump和load

import pickle
dic={"name": "bob", "age": 16, "job": "student", 2: "a"}
with open('dump_pickle','wb')as f:
    pickle.dump(dic,f)
with open('dump_pickle','rb') as f:
    tu=pickle.load(f)
print(tu)

{'name': 'bob', 'age': 16, 'job': 'student', 2: 'a'}

pickle.dump()后会以2进制保存,mode用’w’和’r’时会报错,‘write() argument must be str, not bytes’。要用’wb’和’wr’。'b’时的错误:‘gbk’ codec can’t decode byte 0x80 in position 0: illegal multibyte sequence

€}q(XnameqXbobqXageqKXjobqXstudentqKXaqu.
txt格式打开dump_pickle
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章