time模块
import time
time.sleep(n) #休眠n秒
time.time() #获取往当前时间戳。
在python中,表示时间通常有三种方式:
-
时间戳(timetamp):表示1970.01.01 00:00:00 开始按秒计算的偏移量
-
格式化的时间字符串(format string)
-
python中时间日期格式化符号:
%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.localtime()
time.struct_time(tm_year=2019, tm_mon=7, tm_mday=26, tm_hour=8, tm_min=59, tm_sec=59, tm_wday=4, tm_yday=207, tm_isdst=0)
time模块的常用方法
方法 | 描述 |
---|---|
time.localtime([sec]) | 将一个时间戳转化为一个结构化时间 |
time.gmtime([sec]) | 将一个时间戳转化为UTC时区(0时区),也是结构化时间 |
time.time() | 返回当前的时间戳 |
time.mktime(t) | 讲time.struct_time转化为时间戳 |
time.sleep(sec) | 将线程推迟指定的时间允许,单位(s) |
time.asctime([t]) | 把表时间的元组或struct_time表示为:‘’周几 月 日 时分秒 年‘’ |
time.ctime([t]) | 把一个时间戳转化为time.asctime()的形式,未传参数,默认time.time() |
time.strftime(format[,t]) | 把一个代表时间的元组或struct_time转化为格式化的字符串,未传参数,默认localtime() |
time.strptime() | 将结构化字符串转化为struct_time形式 |
- 时间戳,计算机识别的
- 字符串时间,人类可以看得
- 结构化时间,利于对时间操作
时间戳和结构化时间的转化
- 时间戳---->结构化时间
>>> 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=21, tm_sec=4, 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=21, tm_sec=4, tm_wday=4, tm_yday=207, tm_isdst=0)
- 结构化时间—>时间戳
>>> tp_struct=time.localtime()
>>> time.mktime(tp_struct)
1564104178.0
结构化时间和字符串时间的转化
- 结构化时间—>字符串时间
>>> tp_struct=time.localtime()
>>> time.strftime("%Y-%m-%d %X",tp_struct)
'2019-07-26 09:22:58'
- 字符串时间—>结构化时间
>>> time.strptime("2019-7-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:22:58 2019'
>>> time.asctime()
'Fri Jul 26 09:46:40 2019'
时间戳和字符串的转化
>>> time.ctime()
'Fri Jul 26 09:52:07 2019'
>>> time.ctime(1500000000)
'Fri Jul 14 10:40:00 2017'
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, 3, 14, 602496)
>>> print(datetime.datetime.now())
2019-07-26 10:03:44.593720
>>> print(datetime.datetime.now().date())
2019-07-26
>>> print(datetime.datetime.now().time())
10:04:24.207548
>>> print(datetime.datetime.now()+datetime.timedelta(-1))#当前时间减一天
2019-07-25 10:05:49.981142
>>> print(datetime.datetime.now()+datetime.timedelta(hours=-1))#减一小时
2019-07-26 09:06:31.960906
sys模块
sys模块是与python解释器交互的一个接口
处理命令行参数
py文件中
import sys
print("Script name is:",sys.argv[0])
if len(sys.argv)>1:
print("There are ",len(sys.argv)-1,"atguments")
for i in sys.argv[1:]:
print(i)
else:
print("There are no arguments")
命令行
>>>python day_02.py aa bb cc
Script name is: day_02.py
There are 3 atguments
aa
bb
cc
序列化模块
概念:将一个对象从内存中转换为可存储(字符串类型)或者可传输(bytes)类型的过程。
Python中叫pickling。
为什么要使用序列化
- 持久化数据类型
- 跨平台交互使用
- 使程序更易维护
[外链图片转存失败(img-AUxt0Ouf-1564323556185)(C:\Users\ou\Desktop\20190727103435129.png)]
json
json格式在各个语言中都可以通用的序列化格式。在json中,所有的字符串必须为双引号""。
json数据类型 | python数据类型 |
---|---|
{} | dict |
[] | list |
“string” | str |
123.56 | int/float |
true/false | True/False |
null | None |
json优缺点:
-
优点:所有的数据类型是各语言通用的。
-
缺点:
-
json支持的数据类型比较少
- 只支持列表,字典,数值,字符串以及布尔值
-
它对数据的要求十分严格
- 比方说字典中的key必须是字符串
-
查看json的方法和属性
dir()
四个功能
-
序列化
- dumps
- dump
-
反序列化
- loads
- load
>>> import json
>>> dic={"name":"College","age":20,"type":"University"}
>>> sr_dic=json.dumps(dic)# 序列化的过程,将字典转化为一个字符串
>>> type(sr_dic)
<class 'str'>
>>> sr_dic
'{"name": "College", "age": 20, "type": "University"}'
>>> dic
{'name': 'College', 'age': 20, 'type': 'University'}
>>> dic={"name":"College","age":20,"type":"University",2:0
>>> sr_dic=json.dumps(dic)
>>> sr_dic}# key被强转为字符串
'{"name": "College", "age": 20, "type": "University", "2": 0}'
>>> dic2=json.loads(sr_dic) # 反序列化
>>> dic2
{'name': 'College', 'age': 20, 'type': 'University', '2': 0}
>>> dic3=json.loads(dic)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "F:\64 python 36\lib\json\__init__.py", line 348, in loads
'not {!r}'.format(s.__class__.__name__))
TypeError: the JSON object must be str, bytes or bytearray, not 'dict'
#假如是元组,序列化时强转为列表;若元组作为字典的key,序列化时报错
>>> tuple1=(0,1,3)
>>> dic4=json.dumps(tuple1)
>>> dic4
'[0, 1, 3]'
>>> dic={tuple1:2}
>>> dic5=json.dumps(dic)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "F:\64 python 36\lib\json\__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "F:\64 python 36\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "F:\64 python 36\lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
TypeError: keys must be a string
import json
dict1={"name":"College","age":20,"type":"University",2:0}
with open('dump_json','w')as f:
json.dump(dict1,f)#dump方法可以接受一个文件句柄。直接将字典-->字符串,写入文件
with open('dump_json')as f:
ret=json.load(f)
print((ret,type(ret)))
({'name': 'College', 'age': 20, 'type': 'University', '2': 0}, <class 'dict'>)
#想要读取多条就要在写入时写入换行
with open('dump_json','a')as f:
json.dump(dict1,f)
f.write('\n')
#多写入几次后
with open('dump_json')as f:
for i in f:
ret=json.loads(i)
print((ret))
#{'name': 'College', 'age': 20, 'type': 'University', '2': 0}
#{'name': 'College', 'age': 20, 'type': 'University', '2': 0}
#{'name': 'College', 'age': 20, 'type': 'University', '2': 0}
#{'name': 'College', 'age': 20, 'type': 'University', '2': 0}
pickle
内存中结构化的数据<—>格式pickle<—>bytes类型<—>保存在文件或基于网络传输
pickle 优缺点
-
优点
- 支持python中的几乎所有类型
- pickle会把数据类型序列化为bytes类型
-
缺点
- 只支持python
四个功能
-
序列化
- dumps
- dump
-
反序列化
- loads
- load
import pickle
dict1={"name":"College","age":20,"type":"University",2:0}
dict2=pickle.dumps(dict1)
print(type(dict2))
# <class 'bytes'>
dict3=pickle.loads(dict2)
print(type(dict3))
# <class 'dict'>
缺点
-
只支持python
-
缺点
- 只支持python
四个功能
-
序列化
- dumps
- dump
-
反序列化
- loads
- load
import pickle
dict1={"name":"College","age":20,"type":"University",2:0}
dict2=pickle.dumps(dict1)
print(type(dict2))
# <class 'bytes'>
dict3=pickle.loads(dict2)
print(type(dict3))
# <class 'dict'>
缺点
- 只支持python