一、包的使用
-
什么是包:包就是一个含有
__init__.py
文件的文件夹 -
为何要用包
-
如何用包
绝对导入:
#========================>m1.py
def func1():
print('from func1')
def func2():
print('from func2')
def func3():
print('from func1')
def func4():
print('from func4')
#========================>m2.py
def f1():
print('from f1')
def f2():
print('from f2')
def f3():
print('from f3')
def f4():
print('from f4')
#========================>__init__.py
print('__init__ run....')
from aaa.m1 import func1,func2,func3,func4
from aaa.m2 import f1,f2,f3,f4
#========================>run.py
import aaa # aaa--------->__init__.py 导aaa相当于导入aaa文件夹下的__init__.py
aaa.func1()
aaa.func2()
aaa.func3()
aaa.func4()
aaa.f1()
aaa.f2()
aaa.f3()
aaa.f4()
相对导入:
#========================>m1.py
def func1():
print('from func1')
def func2():
print('from func2')
def func3():
print('from func1')
def func4():
print('from func4')
#========================>m2.py
def f1():
print('from f1')
def f2():
print('from f2')
def f3():
print('from f3')
def f4():
print('from f4')
#========================>__init__.py
print('__init__ run....')
from .m1 import func1,func2,func3,func4
from .m2 import f1,f2,f3,f4
#========================>run.py
import sys
#是使用者要处理的事情保证能找到模块
sys.path.append(r'D:\Program Files\Python\zdc\day15\dir')
import aaa
aaa.func1()
aaa.func2()
aaa.func3()
aaa.func4()
aaa.f1()
aaa.f2()
aaa.f3()
aaa.f4()
二、json与pickle模块
-
什么是序列化:序列化就是将内存中的数据类型转成另外一种格式
即:
字典========>序列化========>其他的格式========>存到硬盘
硬盘========>其他格式========>反序列化========>字典
-
为什么要序列化
- 持久保存程序的运行状态
- 数据的跨平台交互
-
如何序列化
json:
优点:这种格式是一种通用的格式,所有编程语言都能识别
缺点:不能识别所有python类型
pickle:
优点:能识别所有python类型
缺点:只能被python这门编程语言识别
序列化:
import json
dic = {'k1': True, 'k2': 10, 'k3': 'egon', 'k4': '你好啊'}
dic_json = json.dumps(dic)
print(dic_json, type(dic_json))
持久化:
import json
dic = {'k1': True, 'k2': 10, 'k3': 'egon', 'k4': '你好啊'}
dic_json = json.dumps(dic)
with open('a.json',mode='wt',encoding='utf-8') as f:
f.write(dic_json)
序列化+持久化:
import json
dic = {'k1': True, 'k2': 10, 'k3': 'egon', 'k4': '你好啊'}
with open('a.json',mode='wt',encoding='utf-8') as f:
json.dump(dic,f)
从文件中读取json格式化的字符:
import json
with open('a.json', mode='rt', encoding='utf-8') as f:
dic_json = f.read()
反序列化:
import json
with open('a.json', mode='rt', encoding='utf-8') as f:
dic_json = f.read()
dic = json.loads(dic_json)
print(dic)
读取文件内容+反序列化:
import json
with open('a.json',mode='rt',encoding='utf-8') as f:
dic=json.load(f)
print(dic['k1'])
=====================================>pickle
pickle序列化:
import pickle
dic_pkl = pickle.dumps({1, 2, 3, 4})
print(dic_pkl)
pickle持久化:
import pickle
dic_pkl = pickle.dumps({1, 2, 3, 4})
with open('b.pkl', mode='wb') as f:
f.write(dic_pkl)
pickle序列化+持久化:
import pickle
dic = {'k1': True, 'k2': 10, 'k3': 'egon', 'k4': '你好啊', }
with open('c.pkl', mode='wb') as f:
pickle.dump(dic, f)
pickle反序列化:
import pickle
with open('b.pkl', mode='rb') as f:
s_pkl = f.read()
s = pickle.loads(s_pkl)
print(s,type(s))
pickle读取内容+反序列化:
import pickle
with open('c.pkl', mode='rb') as f:
dic = pickle.load(f)
print(dic, type(dic))
三、time与datetime模块
time示范:
import time
1.时间戳
print(time.time())
2.格式化的字符
print(time.strftime('%Y-%m-%d %H:%M:%S %p')) #2018-12-05 18:33:19 PM
3.结构化的时间对象
print(time.localtime()) #格式化时间戳为本地的时间
print(time.localtime().tm_hour)
print(time.localtime().tm_wday)
print(time.localtime().tm_yday)
print(time.gmtime()) #将一个时间戳转换为UTC时区
#时间转换
时间戳======>struct_time======>格式化的字符串
struct_time = time.localtime(123123)
print(struct_time)
print(time.strftime('%Y-%m-%d',struct_time))
格式化的字符串======>struct_time======>时间戳
struct_time = time.strptime('2017-03-11', '%Y-%m-%d')
print(struct_time)
print(time.mktime(struct_time))
datetime示范:
import datetime
print(datetime.datetime.now()) #2018-12-05 18:50:52.414038
print(datetime.datetime.fromtimestamp(1231231) #1970-01-15 14:00:31
print(datetime.datetime.now() + datetime.timedelta(days=3)) #三天后的时间
print(datetime.datetime.now() - datetime.timedelta(days=3)) #三天前的时间
print(datetime.datetime.now() + datetime.timedelta(days=-3)) #三天前的时间
print(datetime.datetime.now() + datetime.timedelta(days=3,hours=3)) #三天零三小时前的时间
四、random模块
import random
print(random.random()) #随机0-1之间的小数
print(random.randint(1,3)) #随机1-3之间的整数
print(random.randrange(1,3)) #随机1-3之间的整数不包含3
print(random.uniform(1,3)) #随机1-3之间的小数
print(random.choice([1,'a','c'])) #随机生成数字和字母
print(random.sample([1,'a','c'],2)) #随机生成数字和字母2个
item = [1, 3, 5, 7, 9]
random.shuffle(item) #洗牌
print(item)
随机生成验证码
import random
def make_code(max_size=5):
res = ''
for i in range(max_size):
num = str(random.randint(0, 9))
alp = chr(random.randint(65, 90))
res += random.choice([num, alp])
return res
print(make_code(10))