1.今日内容
- 模块基础知识
- time/datetime
- json/picle
- shutil
- logging
- 其他
2.内容回顾和补充
2.1模块(类库)
- 内置
- 第三方
- 自定义
面试题:
- 列举常用内置模块:json / time / os/ sys
2.2 定义模块
定义模块时可以把一个py文件或一个文件夹(包)当作一个模块,以方便于以后其他py文件的调用 。
对于包(文件夹)的定义:
py2:文件见中必须有 _ init _.py 。手工创建此文件即可。
在pycharm中手工创建python package时候,默认自动会在这个文件中创建--init--.py文件。
py3:不需要 _ init _.py .
推荐大家以后写代码时,都要加上此文件。
2.3 模块的调用
2.3.1 示例一
# lizhongwei.py #!/usr/bin/env python # -*- coding:utf-8 -*- def show(): print('我司里种种') def func(): pass print(456)
# 导入模块,加载此模块中所有的值到内存。所以此时先打印出:456。后打印该代码块下面的123。 import lizhongwei print(123) # 调用模块中的函数 lizhongwei.func()
# 导入模块 from lizhongwei import func,show from lizhongwei import func from lizhongwei import show from lizhongwei import * func()#from导入方法,直接使用函数。
# 导入模块 from lizhongwei import func as f#别名法,防止func函数与现有代码中函数重名。 def func(): print(123) f()
导入模块:
- import 模块 使用方式:模块.函数()
- from 模块 import 函数 使用方式:函数()
- from 模块 import 函数 as 别名 使用方式:别名()
2.3.2 示例二
lizhong - jd.py - pdd.py - tb.py 包.py
#上个代码框中的文件夹中文件,引用如下方法: import lizhong.jd lizhong.jd.f1()
from lizhong import jd jd.f1()
from lizhong.jd import f1 f1()
总结
- 模块和要执行的py文件在同一目录 且 需要 模块中的很多功能时,推荐用: import 模块
- 其他推荐:from 模块 import 模块 用法:模块.函数()
- 其他推荐:from 模块.模块 import 函数 用法:函数()
注意: sys.path的作用是什么?sys.path默认在py的安装目录和执行文件当前所在的目录。
1、如果要增加非py安装目录下,需要append非py安装目录。sys.path.append('path')。
然后在引用目录下的py文件就可以引用成功:如:import page
2、如果page的上级目录和执行的文件在同一个目录(lib),这样引用也可以:
from lib import page
3、如果page和执行的py文件在同一个目录下,直接引用即可。
import page
练习题
将父级目录加入sys.path中,方便后期调用此父级下的代码块。 import sys v=sys.path print(v) import os print(__file__) print(os.path.dirname(__file__)) print(os.path.abspath(__file__)) print(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(DIR) print(sys.path) === ['C:\\python\\venv', 'C:\\python', 'C:\\python\\python36\\python36.zip', 'C:\\python\\python36\\DLLs', 'C:\\python\\python36\\lib', 'C:\\python\\python36', 'C:\\python\\python36\\lib\\site-packages', 'C:\\python\\PyCharm 2019.2.2\\PyCharm 2018.2.1\\helpers\\pycharm_matplotlib_backend'] C:/python/venv/day15.py C:/python/venv C:\python\venv\day15.py C:\python ['C:\\python\\venv', 'C:\\python', 'C:\\python\\python36\\python36.zip', 'C:\\python\\python36\\DLLs', 'C:\\python\\python36\\lib', 'C:\\python\\python36', 'C:\\python\\python36\\lib\\site-packages', 'C:\\python\\PyCharm 2019.2.2\\PyCharm 2018.2.1\\helpers\\pycharm_matplotlib_backend', 'C:\\python']
2.4 内置模块
os
sys
time
json
dumps
- dump(v,f)#将v写入文件f中。
loads
- print(load(f)),打印文件中内容。
注意:
字典或列表中如有中文,序列化时想要保留中文显示:
v = {'k1':'alex','k2':'李杰'} import json val = json.dumps(v,ensure_ascii=False)#保留中文 print(val)
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()
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))
haslib
random
getpass
shutil
copy
3. 今日内容
3.1 json和pickle
- json,优点:所有语言通用;缺点:只能序列化基本的数据类型 list/dict/int...
- pickle,优点:python中所有的东西都能被他序列化(socket对象);缺点:序列化的内容只有python认识。
import pickle # #################### dumps/loads ###################### """ v = {1,2,3,4} val = pickle.dumps(v)#序列化出来不可读 print(val) data = pickle.loads(val) print(data,type(data)) """ """ #序列化函数(json做不到): def f1(): print('f1') v1 = pickle.dumps(f1) print(v1) v2 = pickle.loads(v1) v2() """ # #################### dump/load ###################### # 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) ================== encording后称作字节 json:得出来的是字符串 pickle:得出来的是字符串
3.2 shutil 模块
import shutil # 删除目录 # shutil.rmtree('test') # 重命名,文件和目录都可以 # shutil.move('test','ttt') # 压缩文件 # shutil.make_archive('zzh','zip','D:\code\s21day16\lizhong') # 解压文件,有目录直接解压,无目录,则直接创建 # 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')
3.3 time&datetime
UTC/GMT:世界时间
本地时间:本地时区的时间。
3.3.1 time模块
- time.time() ,时间戳:1970-1-1 00:00
- time.sleep(10),等待秒数。
- time.timezone
# https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=4ZwIFHM6iw==&tip=1&r=-781028520&_=1555559189206
3.3.2 datetime模块
#!/usr/bin/env python # -*- coding:utf-8 -*- import time from datetime import datetime,timezone,timedelta # ######################## 获取datetime格式时间 ############################## """ v1 = datetime.now() # 当前本地时间 print(v1) tz = timezone(timedelta(hours=7)) # 当前东7区时间 v2 = datetime.now(tz) print(v2) v3 = datetime.utcnow() # 当前UTC时间 print(v3) """ print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) # ######################## 把datetime格式转换成字符串 ############################## # v1 = datetime.now() # print(v1,type(v1)) # val = v1.strftime("%Y-%m-%d %H:%M:%S") # print(val) # ######################## 字符串转成datetime ############################## # v1 = datetime.strptime('2011-11-11','%Y-%m-%d') # print(v1,type(v1)) # ######################## datetime时间的加减 ############################## # v1 = datetime.strptime('2011-11-11','%Y-%m-%d') # v2 = v1 - timedelta(days=140) # date = v2.strftime('%Y-%m-%d') # print(date) # ######################## 时间戳和datetime关系 ############################## # ctime = time.time() # print(ctime) # v1 = datetime.fromtimestamp(ctime) # print(v1) # v1 = datetime.now() # val = v1.timestamp() # print(val)
3.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(a): try: return a.strip() except Exception as e: pass return False v = func('alex') if not v: print('函数执行失败') else: print('结果是',v)
练习题
# 1. 写函数,函数接受一个列表,请将列表中的元素每个都 +100 def func(arg): result = [] for item in arg: if item.isdecimal(): result.append(int(item) + 100) return result # 2. 写函数去,接受一个列表。列表中都是url,请访问每个地址并获取结果。 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 def func2(url_list): result = [] for url in url_list: try: response = requests.get(url) result.append(response.text) except Exception as e: pass return result func(['http://www.baidu.com','http://www.google.com','http://www.bing.com']) 异常处理结构: try: pass except Exception as e: pass
来源:https://www.cnblogs.com/cuiyongchao007/p/12297314.html