模块(总)
对于range py2,与py3的区别:
- py2:range() 在内存中立即把所有的值都创建,xrange() 不会再内存中立即创建,而是在循环时边环边创建.
- py3:range() 不会再内存中立即创建,而是在循环时边环边创建.
对于包的定义py2与py3的区别:
- 包内py2内文件夹中必须有_ _ init _ _ .py
- py3中不需要
- 建议所有的包内全部加上_ _ init _ _ .py文件
sys.exit() 退出程序
函数书写时一定要写注释
复杂代码写注释
构造字典和函数的对应关系,避免重复冗余的if ellse
a=1 b=2 a,b=b,a#ab值交换
1
2
3遇到问题解答时一定要问,或者给出多个解答
random
print( random.randint(1,10) ) # 产生 1 到 10 的一个整数型随机数 print( random.random() ) # 产生 0 到 1 之间的随机浮点数 print( random.choice('tomorrow') ) # 从序列中随机选取一个元素 print( random.randrange(1,100,2) ) # 生成从1到100的间隔为2的随机整数
1
2
3
4
# 模块基本知识
- 通俗的理解
__name__ == '__main__'
:假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明')
;在你自己眼中,你是你自己(__name__ == '__main__')
。 if __name__ == '__main__'
的意思是:当.py文件被直接运行时,if __name__ == '__main__'
之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'
之下的代码块不被运行。
# 1.模块分类
内置模块 : py内部提供的功能,直接使用
import sys sys.argv()
1
2第三方模块 : 需要从第三方下载/安装使用
#https://pypi.org/ 'pip.exe路径' pip install 需要安装模块的名称 #执行命令
1
2自定义模块:根据需求自我定义模块
- 创建文件 file.py
- 导入模块 impoort file
- 运行模块
# 2.内置模块(类库)
- 常用内置模块:json/time/ /os/sys
- 模块(类库)可以是py文件,也可以是文件夹
- 定义模块时可以把一个py文件或一个文件夹(包)当做一个模块,方便调用
# 2.1 os模块
os.mkedirs() 创建目录和子目录
os.rename(a,b) 重命名
os.path.jion(a,b) 连接路径
os.path.dirname() 文件上一层目录
os.path.abspath() 绝对路径
os.path.exists() 路径是否存在
os.stat().st_size 判断文件大小
os.listdir() 查看路径内存在文件
os.walk() 查看路径内所有层级文件
# 2.2 sys模块
- sys.argv(索引) 取用户输入参数
- sys.path 默认python取导入模块时,会按照sys.path指定的文件夹去寻找
- sys.path.append('目录'), 添加自定义模块读取目录
# 2.3 json / pickle模块
json =鸡哥的儿子
鸡哥的儿子是字符串,头衔是:翻译官,擅长翻译列表和字典形式
有两个特殊功能:序列化【dumps】(给别人用)反序列化【loads】(拿来自己用 )
2
3
json 是一个特殊的字符串(长得像列表/字典/字符串/数字混合)
json.dumps() 序列化:将列表/字典/字符串/数字转化为json格式的字符串
json.loads() 反序列化:序列化的逆向操作
json格式要求:
- 只能包含int/ str/ list/ dict/ bool 不存在元组/集合
- 最外层必须是一个列表或字典
- 在json中如果有字符串,必须是双引号"json中的字符串"
- 真假小写true/false
字典或者列表中存在中文,序列化的时候或转为UNcode格式,如果想保存中文就需要进行以下操作
v1=[1,2,3,4,'2','大牛'] val = json.dumps(v1,ensure_ascii=False) print(val) #[1, 2, 3, 4, "2", "大牛"]
1
2
3json:有点:所有语言通用,缺点:只能序列化部分数据类型;
pickle;可以序列化多有数据,但是序列化之后只有python识别
# 2.4 time/datetime模块
- 共有24个时区,每个时区相差一个小时
# 2.4.1 time模块
time.time() 时间戳stamp 1970-1-1 00:00到现在的秒数
- UTC/GMT :世界时间
- 本地时间
#小拓展:1970年1月1日 算 UNIX 和 C语言 生日。 由于主流计算机和操作系统都用它,其他仪器,手机等也就用它了。 #UNIX系统认为1970年1月1日0点是时间纪元,所以我们常说的UNIX时间戳是以1970年1月1日0点为计时起点时间的。
1
2time.sleep('秒数') 等待秒数
注意要点:
15555555555243289... 55555534232214324... #看到这种需要想到是不是戳
1
2
3
# 2.4.2 datetime模块
获取datetime格式时间
- datetime.now() 获取当前本地时间
- datetime.utcnow() 获取当前utc时间
把datetime格式转换成字符串
- .strftime()
from datetime import datetime t1 = datetime.utcnow() print(t1,type(t1)) #2019-04-18 07:41:58.725352 <class 'datetime.datetime'> val = t1.strftime('%Y-%m-%d %H-%M-%S') print(val) #2019-04-18 07:48:35
1
2
3
4
5把字符串格式的转化为datetime类型
datetime.strptime()
from datetime import datetime val = t1.strptime('2019-04-18','%Y%m%d') print(val) #2019-04-18 00:00:00
1
2
3
应用场景:
- 时间加减
from datetime import datetime,timezone,timedelta t1= datetime.strptime('2017-9-9','%Y-%m-%d') t2= t1 +timedelta(days=11) print(t2) #2017-09-20 00:00:00
1
2
3
4时间戳与datetime的关联
时间戳转datetime
- datetime.fromtimestamp(t)
from datetime import datetime,timezone,timedelta t1 = time.time() val = datetime.fromtimestamp(t1) print(val)
1
2
3
4datetime转时间戳
- .timestamp()
from datetime import datetime,timezone,timedelta t1 = datetime.now() val = t1.timestamp() print(val)
1
2
3
4
# 2.5 shutil模块
shutil.rmtree() 删除目录
shutil.move(a,b) 重命名文件或者目录
shutil.make_archive("压缩后的文件名称","压缩格式","要压缩的文件绝对路径") 压缩文件
shutil.make_archive('zzh','zip','D:\code\s21day16\lizhong')
1shuti.unpack_archive("要解压文件名称",路径"要解压到的路径",,格式)路径不存在则创建
shutil.unpack_archive('zzh.zip',extract_dir=r'D:\code\xxxxxx\xxxx',format='zip')
1
# 2.6 logging模块(欠)
# 3.模块调用
在那个文件里运行代码时,系统会自动把文件所在目录下的文件夹和文件自动加载到内存
导入模块(第一种)
- import 模块名称
- 调用: 模块名称.函数()
- 代码从上到下运行,遇见导入的模块时,立即执行导入的模块
导入模块(第二种)
from 模块名称 import 函数名 , 函数名 as 别名 #导入部分函数,as可以在函数名重复时起别名
from 模块名称 import * #导入模块全部函数
from 模块.模块.模块 import 函数名称
调用: 函数名/别名()
# 导入模块 from lizhongwei import func,show from lizhongwei import func from lizhongwei import show from lizhongwei import * func()
1
2
3
4
5
6
# 调用小结:
- 模块和要执行的py文件在同一目录,需要模块中很多个功能,推荐使用import 模块
- 其他推荐from模式导入
# 异常处理:
try:
操作
except Exception as e:
print('操作异常')
2
3
4
5
6
7
#示例
def func(a):
try:
return a.strip()
except Exception as e:
pass
return False
v = func('alex')
if not v:
print('函数执行失败')
else:
print('结果是',v)
2
3
4
5
6
7
8
9
10
11
12
# 总结:
# 函数高级 5*
- 嵌套
- 装饰器
# 模块分类和定义 4*
- 内置模块
- os
- sys
- json/pckle
- time
- datetime
- shutil
- 第三方
- requests
- xlrd
- 自定义模块
- 文件
- 文件夹 + init.py【包】
# 导入模块
- sys.path
- 导入
- import
- from xx.xxx import xx