time模块
import time
time.sleep([n]) #休眠n秒
time.time() #获取当前时间戳
表示时间通常有三种方式:
- 时间戳(timetamp):表示从1970.01.01的00:00:00开始按秒计算的偏移量。
- 格式化的时间字符串(format string)
符号 | 描述 |
---|---|
%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 | 当前时区的名称 |
%% | %号本身 |
- 结构化的时间(struct_time)---->元组,9个元素(年月日时分秒,一年第几周,一年的第几天,夏令时)
time模块常用方法:
方法 | 描述 |
---|---|
time.localtime([sec]) | 将一个时间戳转化为一个当前时区的struct_time(若未提供参数,当前时间) |
time.gmtime([sec]) | 和localtime()类似,不同的是,其将一个时间戳转换为UTC时区(0时区)的struct_time |
time.time() | 返回当前时间戳 |
time.mktime(t) | 将time.struct_time转化为时间戳 |
time.sleep(sec) | 线程推迟指定的时间运行,单位(s) |
time.asctime([t]) | 把表时间的元组或struct_time表示为:‘Fri Jul 26 09:08:13 2019’,如果未传参数,默认为time.localtime() |
time.ctime([t]) | 把一个时间戳转化为time.asctime()的形式。如果未传参数,默认time.time() |
time.strftime(format[,t]) | 把一个代表时间的元组/struct_time(localtime()和gmtime()转化为格式化的字符串,未传参数,默认未time.localtime()) |
time.strptime() | 将结构化字符串转化为struct_time形式 |
- 时间戳,计算机识别的
- 字符串时间,人类看的
- 结构化时间,对时间操作
时间戳和结构化时间的转化
- time.gmtime(now)
- time.localtime(now)
>>> now=time.time()
>>> time.gmtime(now) #UTC时间,0时区
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=1, tm_min=20, tm_sec=18, tm_wday=4, tm_yday=207, tm_isdst=0)
>>> time.localtime(now) #当地时间,以北京时区为准
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=9, tm_min=20, tm_sec=18, tm_wday=4, tm_yday=207, tm_isdst=0)
结构化时间和时间戳的转化
- time.mktime(结构化时间)
>>> tp_struct=time.localtime()
>>> time.mktime(tp_struct)
1564104187.0
结构化时间到字符串时间的转化
- time.strftime(format[,t])
>>> tp_struct=time.localtime()
>>> time.strftime("%Y-%m-%d %X")
'2019-07-26 09:29:10'
字符串时间到结构化时间的转化
- time.strptime(时间字符串,字符串对应格式)
>>> time.strptime("2019-07-26","%Y-%m-%d")
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=207, tm_isdst=-1)
>>> time.strptime("2019/07/26","%Y/%m/%d")
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=207, tm_isdst=-1)
结构化时间和字符串时间的转化(国际化时间字符串)
- time.asctime(结构化时间)
>>> tp_struct=time.localtime()
>>> time.asctime(tp_struct)
'Fri Jul 26 09:51:23 2019'
>>> time.asctime()
'Fri Jul 26 09:51:56 2019'
时间戳和字符串的转化(国际化)
>>> time.ctime(time.time())
'Fri Jul 26 09:52:42 2019'
>>> time.ctime()
'Fri Jul 26 09:52:50 2019'
>>> time.ctime(15000000000)
'Mon May 1 10:40:00 2445'
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, 2, 49, 13741)
>>> print(datetime.datetime.now())
2019-07-26 10:03:17.091634
>>> print(datetime.datetime.now().date())
2019-07-26
>>> print(datetime.datetime.now().time())
10:04:22.941932
>>> print(datetime.datetime.now()+datetime.timedelta(-1)) #当前减一天
2019-07-25 10:06:20.264761
>>> print(datetime.datetime.now()+datetime.timedelta(hours=1)) #当前加一小时
2019-07-26 11:06:38.535301
>>> print(datetime.datetime.now()+datetime.timedelta(1)) #当前加一天
2019-07-27 10:06:53.769582
sys模块
sys模块是与Python解释器交互的一个接口。
处理命令行参数
在解释器启动后,argv列表包含了传递脚本的所有参数,列表的第一个元素是脚本自身的名称。
>>> import sys
>>> print(sys.byteorder) #显示本地字节规则的指示器
little
>>> print(sys.copyright) #显示Python解释器有关的版权信息
Copyright (c) 2001-2017 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.
>>> print(sys.executable) #显示Python解释器在磁盘上的存储路径
F:\python.exe
>>> print(sys.getfilesystemencoding()) #显示当前系统上保存文件所用的字符集
utf-8
>>> print(sys.maxsize) #显示Python解释器所在平台最大值
9223372036854775807
>>> print(sys.platform) #显示当前Python解释器版本信息
win32
>>> print(sys.version) #返回当前Python解释器的主版本号
3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]
序列化模块
序列化
概念:将一个对象从内存中转换为可存储(字符串类型)或者可传输(bytes)类型的过程。
Python中叫pickling
- 持久化数据类型
- 跨平台交互使用
- 使程序更易维护
json
json格式在各个语言中都可以通用的序列化格式。在json中,所有 的字符串必须为" "。
Json类型 | Python类型 |
---|---|
{} | dict |
[] | list |
“string” | str |
1234.56 | int/float |
true/false | True/False |
null | None |
- 优点:所有的数据类型是各语言通用的。
- 缺点
- json只支持列表、字典、数字、元组、字符串。
查看json的方法和属性
>>> import json
>>> dir(json)
['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_default_decoder', '_default_encoder', 'codecs', 'decoder', 'detect_encoding', 'dump', 'dumps', 'encoder', 'load', 'loads', 'scanner']
四个功能
- dump
- dumps
- load
- loads
##序列化:
>>> dic={"name1":"cc","name2":"sd","name3":"fd"}
>>> sr_dic=json.dumps(dic)
>>> type(sr_dic)
<class 'str'>
>>> print(sr_dic)
{"name1": "cc", "name2": "sd", "name3": "fd"}
>>> dic
{'name1': 'cc', 'name2': 'sd', 'name3': 'fd'}
>>> sr_dic
'{"name1": "cc", "name2": "sd", "name3": "fd"}'
##反序列化:
>>> dic_2=json.loads(sr_dic)
>>> type(dic_2)
<class 'dict'>
>>> dic_2
{'name1': 'cc', 'name2': 'sd', 'name3': 'fd'}
##如果是元组,序列化时强转为列表;若元组作为字典的键,序列化时报错。
如果把数据类型直接序列化写入文件,可以用dumps
dic={"name1":"cc","name2":"sd","name3":"fd"}
dic2={'city':'Hangzhou','history':5000}
with open("dump_json","w") as f:
str_dic1=json.dumps(dic)
str_dic2=json.dumps(dic2)
f.write(str_dic1 + '\n')
f.write(str_dic2 + '\n')
with open('dump_json')as f:
for line in f:
ret=json.loads(line)
print(ret)
pickle
只用于python,内存中结构化的数据<---->格式pickle<---->bytes类型<---->保存在文件或基于网络传输
- 优点:
- 支持Python中的几乎所有类型
- pickle会把数据类型序列化为bytes类型
- 缺点:
- 只支持Python
四个功能:
- 序列化:
- dumps
- dump
- 反序列化:
- load
- loads
import pickle
dic={"name1":"cc","name2":"sd","name3":"fd"}
dic_b=pickle.dumps(dic)
print(type(dic_b))
print(dic_b)
dic_b=pickle.loads(dic_b)
print(type(dic_b))
#输出结果:
<class 'bytes'>
b'\x80\x03}q\x00(X\x05\x00\x00\x00name1q\x01X\x02\x00\x00\x00ccq\x02X\x05\x00\x00\x00name2q\x03X\x02\x00\x00\x00sdq\x04X\x05\x00\x00\x00name3q\x05X\x02\x00\x00\x00fdq\x06u.'
<class 'dict'>