No.16模块(三)
No.16
今日概要
- 模块的基础知识
- time / datetime
- json / picle
- shutil
- logging
内容回顾和补充
1.模块分类(模块别名类库)
- 内置
- 第三方
- 自定义
面试题:
- 列举常用的内置模块:json / time ....... / os / sys
2.定义模块
定义模块可以把py文件或文件夹(包)当作一个模块,方便以后其它py文件的使用。
对于包的定义:
- py2:文件夹中必须有 _ _ init_ _.py
- py3:不需要
推荐大家以后写代码时,都要在文件夹中添加此文件。
3.模块调用
3.1示例一
#模块a.py
def func():
print(666)
def show():
print(888)
print(123)
#导入模块方式一
import a # 加载模块中所有的值到内存
print(456)
a.fun()
'''先打印123,再打印456。'''
#导入模块方式二
from a import func
func()
'''先打印123,再打印666。'''
此种方式导入只能用func函数,show函数则不能使用,不过模块中的所有值还是会全部被先加载到内存。
from a import func,show
from a import * # 能使用模块中的所有函数
#导入模块方式三
from a import func as f # 导入模块中的func函数并取别名。
def func():
print(789)
f()
导入模块:
- import 模块 模块.函数()
- from 模块 import *
- from 模块 import 函数 函数()
- from 模块 import 函数 as 别名 别名()
3.2示例二


#方式一
import 包.a
包.a.func()
#方式二
from 包 import a
a.func()
#方式三
from 包.a import func
func()
3.3总结
- import 导入单层 / from import 可以导入多层
- 模块和执行的py文件在同一目录,需要模块中的很多功能:
- 推荐用:import 模块
- 其它情况:
- form 模块 import 模块 模块.函数()
- from 模块.模块 import 函数 函数()
注意:sys.path的作用是什么?


习题

3.4.内置模块
-
os
-
sys
-
time
-
json
-
dumps ▲
-
loads ▲
-
dump
v = {'k1':'alex','k2':'中国'} import json f = open('x.txt',mode='w',encoding='utf-8') val = json.dump(v,f) print(val) f.close() #将数据序列化成json格式写入文件 -
load
import json f = open('test.txt',mode='r',encoding='utf-8') val = json.load(f) print(val,type(val)) f.close() #将文件中json格式数据反序列化读取出来 -
注意:
- 字典或列表中如有中文,序列化时想要保留中文显示。
![]()
-
-
haslib
-
random
-
getpass
-
shutil
-
copy
今日内容
1.json和pickle
-
json
- 优点:所有语言通用
- 缺点:只能序列化Python的基本数据类型 list/dict/int/str/bool
# dump import json v = {'k1':11,'k2':22} f = open('x.txt',mode='w',encoding='utf-8') json.dump(v,f) f.close() # load f = open('x.txt',mode='r',encoding='utf-8') data = json.load(f) f.close() print(data) -
pickle
- 优点:Python中所有东西都能被它序列化(socket对象)
- 缺点:序列化的内容只有Python认识
#序列化/反序列化 # dumps/loads import pickle v = {1,2,3} val = pickle.dumps(v) print(val) data = pickle.loads(val) print(data,type(data)) import pickle def f1(): print('f1') v1 = pickle.dumps(f1) print(v1) v2 = pickle.loads(v1) print(v2) v2() #序列化写入文件/反序列化读取文件 # dump/load import pickle v = {1,2,3,4} print(pickle.dumps(v)) # 已经是2进制 f = open('test.txt',mode='wb') val = pickle.dump(v,f) f.close() import pickle f = open('test.txt',mode='rb') data = pickle.load(f) f.close() print(data)#Python数据通过json序列化后得到的是json格式的字符串 #Python数据通过pickle序列化后得到的是pickle格式的字节流 import pickle v1 = {1,2,3} val1 = pickle.dumps(v1) print(val1,type(val1)) import json v2 = [11,22,33] val2 = json.dumps(v2) print(val2,type(val2))
2.shutil
import shutil
#删除目录/文件夹,不能删文件
shutil.rmtree('目录')
#重命名
shutil.move('原名.txt','新名.txt')
#压缩 shutil.make_archive(指定压缩包路径和名称,压缩格式,文件夹路径)
shutil.make_archive('压缩包名(不带后缀)','zip','D:\a\b\c')
#解压shutil.unpack_archive(压缩包路径和名称,指定解压存放路径,压缩包格式)
shutil.unpack_archive('压缩包名(带上后缀)',extract_dir=r'D:\d\e\f',format='zip')

from datetime import datetime
# 按年月日时分秒显示当前时间
Now_time = datetime.now().strftime('%Y-%m-%d %H-%M-%S')
import os
import shutil
# 如果没有Test文件夹就创建
if not os.path.exists('Test'):
os.makedirs('Test')
# 将xxx文件夹压缩到Test中并以当前时间命名
shutil.make_archive(os.path.join('Test',Now_time),'zip','xxx')
# 将压缩包解压到yyy文件夹中
file_path = os.path.join('Test',Now_time) + '.zip'
shutil.unpack_archive(file_path,r'D:/Py_Learn/yyy','zip')
3.time / datetime
-
UTC/GMT:世界时间
-
本地时间:本地时区时间
3.1time模块
-
time.time() 时间戳
- 1970年0点0分到当前时间所经历的总秒数(起始时间是伦敦时间)
-
time.sleep(10) 等待的秒数
-
time.timezone
3.2datetime模块
import time
C_time = time.time()
from datetime import datetime
# datetime转为str
v1 = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(v1)
# str转为datetime
v2 = datetime.strptime('2018-11-18','%Y-%m-%d')
print(v2)
# 时间戳转为datetime
v3 = datetime.fromtimestamp(C_time)
print(v1)
# datetime转为时间戳
v4 = datetime.now().timestamp()
print(v4)

4.异常处理
try:
val = input('请输入数字:')
num = int(val)
except Exception as e:
print('操作异常')
import requests
try:
ret = requests.get('http://www.google.com')
print(ret.text)
except Exception as e:
print('请求异常')
def func():
try:
return a.strip()
except Exception as e:
pass
return False
v = func('alex ')
if not v:
print('函数执行失败')
else:
print(v)
习题
#写函数,函数接收一个列表,请将列表中的元素每个都加100
def fun(arg):
result = []
for item in arg:
if item.isdecimal():
result.append(int(item) + 100)
return result
#写函数,函数接受一个列表,列表中都是url,请访问每个地址并获取结果。
Lst = ['http://www.bing.com'
'http://www.google.com'
'http://www.baidu.com']
#示例一
import requests
def func(url_list):
result = []
try: # 遇到异常循环就终止
for url in url_list:
response = requests.get(url)
result.append(response.text)
except Exception as e:
pass
return result
#示例二
import requests
def func(url_list):
result = []
for url in url_list:
try: # 遇到异常循环不会终止
response = requests.get(url)
result.append(response.text)
except Exception as e:
pass
return result
总结
1.函数高级 ▲▲▲
- 嵌套
- 装饰器
2.模块分类和定义 ▲
-
内置模块
-
os
-
sys
-
...
-
-
第三方模块
- requests
- xlrd
-
自定义模块
- 文件
- 文件夹 + _ _ init.py _ _(包)
3.导入模块
- sys.path
- 导入
- import xxx
- from xxx import xxx
4.异常处理
try:
pass
except Exception as e:
pass


浙公网安备 33010602011771号