day 16 包 os/sys/json/loggin模块
1.包
-
什么是包;
包是模块的一种形式,包的本质就是一个含有__init__.py文件的文件夹
-
为什么要有包;
在未来扩展模块功能时,不改变模块名和用法。提高模块设计者对模块的管理和维护的便利性
-
如何使用包
-
模块和包
导入模块发生的三件事
- 创建一个包名的名称空间
- 执行包内的.py文件,将执行过程中产生的名字存放于名称空间中
- 在当前执行文件中拿到一个名字aaa,aaa是指向包的名称空间
导入包发生的三件事:
- 创建一个包的名称空间
- 由于包是一个文件夹,无法执行包,因此执行包下的.py文件,将执行过程中产生的名字存放于包名称空间中(即包名称空间中存放的名字都是来自于.py)
- 在当前执行文件中拿到一个名字aaa,aaa是指向包的名称空间的
导入包就是在导入包下的.py,并且可以使用以下两种方式导入:
- import ...
- from ... import...
-
扩展模块功能
02.os模块 与操作系统交互、控制文件/文件夹
1.对文件操作
-
判断是否为文件
res = os.path.isfile(r'/Users/luocongyu/Downloads/百度网盘/上课数据/9月/day 16/01 os模块.py') print(res)
-
删除文件remove
os.remove(r'/Users/luocongyu/Downloads/百度网盘/上课数据/9月/day 16/01 os模块.py')
-
重命名文件
os.rename(r'目标文件',r'新名字')
2.对文件夹操作
-
判断是否为文件夹
res=os.path.isdir(r'文件路径') print(res)
-
创建文件夹
if not os.path.exists(r'路径') # 先判断是否有该文件 os.mkdir(r'路径')
-
删除文件夹
os.rmdir(r'路径')
-
列出文件夹内所有文件
res=os.listdir(r'路径') print(res)
-
列出当前文件路径(__file__ pycharm独有)
print(file) # 尽量用这个 res = os.path.abspath(__file__) # 根据不同操作系统,更换不同的或/ print(res)
-
列出文件夹所在的位置;通过嵌套得到上层文件夹名
res = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) print(res)
-
判断路径是否存在
res = os.path.esists(r'/Users/luocongyu/Downloads/百度网盘/上课数据/9月/day 16/01 os模块.py') print(res)
03.sys模块;与python解释器交互
-
最常用,当python解释器以命令行式运行时,接受多余的参数
res = sys.argv print(res)
-
拿到当前导入的模块
print(sys.modules.keys())
-
了解
print(sys.api_version) print(sys.copyright) print(sys.version) print(sys.hexversion)
04.json模块;实现跨平台数据交互,json串
json模块可转换的内容有
pickle模块使用方法与json模块相同
-
序列化;将python代码转换为json格式的字符串
dic=[1,2,3] res=json.dumps(dic) # 存储在内存中 print(type(res),res)
# 将字典存储到.json文件中 dic = {'a':True,'b':Fales} import json with open('text.json','w',encoding='utf-8') as fw: json.dump(dic,fw)
-
反序列化;将json格式的数据转换为python数据类型
res = json.loads(res) # 存储在内存中 print(type(res), res)
#将文件中的json窜读取出来 with open('test.json', 'r', encoding='utf8') as fr: dic = json.load(fr) print(type(dic), dic)
用json存储函数的话只能存储函数对象,无法存储函数内容
-
05.logging模块;生成日志
-
配置logger对象
import logger nick_logger = logging.Logger('nick') json_logger = logging.Logger('jason')
-
配置日志格式
formmater1 = logging.Formatter('%(asctime)s - %(name)s -%(thread)d - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p ', ) formmater2 = logging.Formatter('%(asctime)s : %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', ) formmater3 = logging.Formatter('%(name)s %(message)s', )
-
配置handler ——>往文件打印or往终端打印
h1 = logging.FileHandler('nick.log') h2 = logging.FileHandler('json.log') sm = logging.StreamHandler()
-
把handler绑定给logger对象
-
nick_logger.addHandler(h1) nick_logger.addHandler(sm) json_logger.addHandler(h2)
-
直接使用
nick_logger.info(f'nick 购买 变形金刚 4个')