s21day16 python笔记
一、模块
1.1 模块的定义
- 模块的定义
- 可以吧一个py文件或一个文件夹(包)当作一个模块,以便于以后其他py文件的调用
- 包的定义(python2与python3的区别七)
- python2:文件夹中必须有_ _ init _ _.py文件
- python3:不需要有_ _ init _ _.py文件
- 建议:推荐以后写代码,无论是python2还是python3,都要加上此文件
1.2 模块分类(内置模块补充)
- time:时间模块
- time.time:时间戳(从1970年到现在经历的秒数)
# https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=4ZwIFHM6iw==&tip=1&r=-781028520&_=1555559189206
time.sleep:等待的秒数
time.timezone
- datetime:时间模块
datetime.now():当前本地时间
datetime.utcnow():当前UTC时间
import time
from datetime import datetime,timezone,timedelta
# 获取datetime格式时间
# 当前本地时间
v1 = datetime.now()
# 当前东7区时间
tz = timezone(timedelta(hours=7))
v2 = datetime.now(tz)
# 当前UTC时间
v3 = datetime.utcnow()
print(v3)
- 相互转换
import time
from datetime import datetime,timedelta
# 1.datetime格式和字符串的相互转换
# 把datetime格式转换成字符串:strftime
v1 = datetime.now()
val = v1.strftime("%Y-%m-%d %H:%M:%S")
# 字符串转成datetime格式:strptime
v1 = datetime.strptime('2011-11-11','%Y-%m-%d')
# 2.datetime时间的加减
v1 = datetime.strptime('2011-11-11','%Y-%m-%d')
v2 = v1 - timedelta(days=140)
# 再转换成字符串
date = v2.strftime('%Y-%m-%d')
# 3.时间戳和datetime的相互转换
# 时间戳转换成datetime格式:fromtimestamp
ctime = time.time()
v1 = datetime.fromtimestamp(ctime)
# datetime格式转换成时间戳:timestamp
v1 = datetime.now()
val = v1.timestamp()
- shutil
用途:删除、重命名、压缩、解压等
shutil.rmtree(path):删除目录
# 删除目录
import shutil
shutil.rmtree(path)
- shutil.move:重命名
# 重命名
import shutil
shutil.move('test','ttt')
- shutil.make_archive:压缩文件
# 压缩文件
import shutil
shutil.make_archive('zzh','zip','D:\code\s21day16\lizhong')
- shutil.unpack_archive:解压文件
# 解压文件
import shutil
shutil.unpack_archive('zzh.zip',extract_dir=r'D:\code\xxxxxx\xxxx',format='zip')
- 示例
import os
import shutil
from datetime import datetime
ctime = datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
# 1.压缩lizhongwei文件夹 zip
# 2.放到到 code 目录(默认不存在)
# 3.将文件解压到D:\x1目录中。
if not os.path.exists('code'):
os.makedirs('code')
shutil.make_archive(os.path.join('code',ctime),'zip','D:\code\s21day16\lizhongwei')
file_path = os.path.join('code',ctime) + '.zip'
shutil.unpack_archive(file_path,r'D:\x1','zip')
- json
json.dumps()补充:
字典或列表中如果有中文,序列化时,如果想保留中文显示
import json
v = {'k1':'alex','k2':'李杰'}
val = json.dumps(v,ensure_ascii = False)
- json.dump:打开文件,序列化后,写入文件
import json
v = {'k1':'alex','k2':'李杰'}
f = open('x.txt',mode='w',encoding='utf-8')
val = json.dump(v,f)
print(val)
f.close()
- json.load:打开文件,读取文件内容
import json
v = {'k1':'alex','k2':'李杰'}
f = open('x.txt',mode='r',encoding='utf-8')
data = json.load(f)
f.close()
print(data,type(data))
- pickle
- pickle与json的区别
- json
- 优点:所有语言通用
- 缺点:只能序列化基本的数据类型 list/dict 等
- pickle
- 优点:python中所有的东西都能被他序列化(socket对象)
- 缺点:序列化的内容只有python认识
- json
- pickle.dumps:序列化
- 序列化后的东西不可读
- pickle.loads:反序列化
# 序列化
v = {1,2,3,4}
val = pickle.dumps(v)
print(val)
# 反序列化
data = pickle.loads(val)
print(data,type(data))
pickle.dump:写入文件(注意:mode='wb')
pickle.load:读取文件(注意:mode='rb')
# 写入文件
v = {1,2,3,4}
f = open('x.txt',mode='wb')
val = pickle.dump(v,f)
f.close()
# 读取文件
f = open('x.txt',mode='rb')
data = pickle.load(f)
f.close()
print(data)
- 补充知识点:字节类型(bytes)
v1 = '李杰'
"""
名称:字符串类型
内部:unicode
类型:<class 'str'>
"""
v2 = v1.encode('utf-8')
"""
名称:字节类型
内部:其他编码(utf-8/gbk等)
类型:<class 'bytes'>
"""
# 注意:json序列化后是字符串类型,pickle序列化后是字节类型
1.3 模块的调用
1.模块的基本导入及调用:导入XXX.py文件
- 方式一
# 导入模块,加载此模块中所有的值到内存。
import XXX
# 调用模块中的函数
XXX.func()
- 方式二
# 导入XXX.py中的func和show
from XXX import func,show
# 导入XXX.py中的所有值
from XXX import *
# 调用模块中的函数
func()
- 方式三
# 如果有重名情况,就导入时起一个别名
# 导入XXX.py中的func,并起一个别名为f
from XXX import func as f
# 调用模块中的函数
f()
- 总结
- 导入:import 模块,调用:模块.函数()
- 导入:from 模块 import 函数,调用:函数()
- 导入:from 模块 import 函数 as 别名,调用:别名()
- 知识点:
- as:起别名
- *:代表全部
- 导入文件夹中的py文件及调用:导入YYY文件夹中的XXX.py文件
- 方式一
# 导入模块
import YYY.XXX
# 调用模块中的函数
XXX.func()
- 方式二
# 导入模块
from YYY import XXX
# 调用模块中的函数
XXX.func()
- 方式三
# 导入模块
from YYY.XXX import func
# 调用模块中的函数
func()
- 总结
- 模块和要执行的py文件在同一目录 且 需要 模块中的很多功能时,推荐用:
- 导入:import 模块,调用:模块.函数()
- 其他推荐:
- 导入:from 模块 import 模块,调用:模块.函数()
- 导入:from 模块.模块 import 函数,调用:函数()