python语法 模块篇
模块:一系列功能的集合体
包: 把文件夹作为模块使用,文件夹里面必须要有__init__.py
1.模块的导入
import module
从xx中导入xxxx
from xx import xxxx
把xx中的所有名字导入
from xx import *
可以通过as,简洁导入模块名称
import xx as x
2. __name__
创建一个module.py文件
name='Module'
def func1():
print('func1')
def func2():
global name
name='Module2'
print('func2')
if __name__ == '__main__':
print('module模块被执行')
func1()
func2()
else:
print("module模块被导入")
此时运行module.py结果如下:

再在其他文件中导入module.py文件
import module as m
print(m.__name__)
print(m.name)
m.func2()
print(m.name)
结果如下:

说明:
如果模块是直接被执行的:name 的值为 'main'
如果模块是被导入到其他模块中的:name 的值为模块的名称
3.模块的查找顺序
- 内存
- 硬盘
从sys.path中找

4.time模块
import time
#1.时间戳
t=time.time()
#2.格式化字符串形式:
print(time.strftime('%Y-%m-%d %H:%M:%S %A'))
print(time.strftime('%Y-%m-%d %X %A'))
print(time.strftime('%x %X %A'))
#结构化时间
res=time.localtime()
print(res)
print(res.tm_year)
print(res.tm_mon)


import time
import datetime
res = datetime.datetime.now() + datetime.timedelta(days=25)
print(res.replace(microsecond=0))
#时间戳 ----> 结构化时间 ----> 格式化的字符串时间
#时间戳 <---- 结构化时间 <---- 格式化的字符串时间
res = time.time()
print(time.localtime(11111111))
print(time.gmtime(11111111))
print(time.gmtime())
res=time.localtime(111111111)
print(time.strftime('%Y-%m-%d %X'),res)
5.random 模块
import random
print(random.random())
print(random.uniform(1,10))
print(random.randint(1,10))
print(random.randrange(1,3))


#生成16位的随机字符串
def pwd_generator(length=16):
pwd=''
char_list=[[97,122],[65,90],[48,57],[33,47]]
for _ in range(16):
random_list=random.choice(char_list)
random_char=chr(random.randint(*random_list))
pwd+=random_char
return pwd
print(pwd_generator())

6.OS 模块
import os
print(os.getcwd()) # 获取当前工作目录
print(os.listdir()) # 获取指定目录文件下所有文件和文件夹,包括隐藏文件、并返回目录
os.remove() #删除文件
- 获取系统的环境变量
import os
print(os.environ)
for i in os.environ:
print(i)
7.序列化与反序列化
序列化:把内存中的数据类型转化成一种特定格式,这种特定格式可以用于存储或传输给其他平台
内存中的数据类型 ---> 序列化 ---> 特定格式(json/pickle)
内存中的数据类型 <--- 反序列化 <--- 特定格式(json/pickle)
用途:
- 存档
- 跨平台数据交互(只能用json,pickle是Python专用格式)
8.json模块
import json
import ujson
#猴子补丁
def monkey_patch_json():
json.__name__='ujson'
json.dumps=ujson.dumps
json.loads=ujson.loads
monkey_patch_json()
#序列化
dic ={'name':'张大仙','age':18,'salary':3.5}
json_res=json.dumps(dic,ensure_ascii=False)
print(json_res,type(json_res))
with open(r"D:\Pycharm workplace\python全栈学习\data\test.json",mode='wt',encoding='utf-8') as f:
f.write(json_res)
#反序列化
with open(r"D:\Pycharm workplace\python全栈学习\data\test.json",mode='rt',encoding='utf-8') as f:
json_res=f.read()
dic=json.loads(json_res)
print(dic,type(dic))

下面是test.json文件内容
{"name":"张大仙","age":18,"salary":3.5}
9.logging模块
import logging
logging.debug('调试日志')
logging.info('消息日志')
logging.warning('警告日志')
logging.error('错误日志')
logging.critical('严重错误日志')

10.日志配置
# coding:utf-8
import logging
# 日志基本配置
logging.basicConfig(
# 1、日志级别
level=30,
# DEBUG:10
# INFO:20
# WARNING:30
# ERROR:40
# CRITICAL:50
# 2、日志输出格式
# format='%(asctime)s %(name)s [%(pathname)s line:%(lineno)d] %(levelname)s %(message)s',
# 3、asctime的时间格式
# datefmt='%Y-%m-%d %H:%M:%S',
# 4、日志输出位置:终端/文件
# filename='user.log', # 不指定此配置,默认打印到终端
)
'''
%(name)s Logger的名字(getlogger时指定的名字)
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出日志的完整路径名
%(filename)s 调用日志输出日志的文件名
%(module)s 调用日志输出日志的模块名
%(funcName)s 调用日志输出日志的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间,默认格式是 “2022-07-30 22:15:53,394”
%(thread)d 线程ID,可能没有
%(threadName)s 线程名,可能没有
%(process)d 进程ID,可能没有
%(message)s 用户输出的消息
'''
'''
logging模块有三个比较重要的功能组件:
1、loggers 配置文件可定义一些输出日志的appname
2、handler 配置日志的分隔大小,输出位置,日志文件创建等
3、formatters 配置日志输出的格式
'''
# 日志配置字典
LOGGING_DIC = {
'version': 1.0,
'disable_existing_loggers': False,
# 日志格式
'formatters': {
'standard': {
'format': '%(asctime)s %(threadName)s:%(thread)d [%(name)s] %(levelname)s [%(pathname)s:%(lineno)d] %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S',
},
'simple': {
'format': '%(asctime)s [%(name)s] %(levelname)s %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S',
},
'test': {
'format': '%(asctime)s %(message)s',
},
},
'filters': {},
# 日志处理器
'handlers': {
'console_debug_handler': {
'level': 'DEBUG', # 日志处理的级别限制
'class': 'logging.StreamHandler', # 输出到终端
'formatter': 'simple' # 日志格式
},
'file_info_handler': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,日志轮转
'filename': 'user.log',
'maxBytes': 1024*1024*10, # 日志大小 10M
'backupCount': 10, # 日志文件保存数量限制
'encoding': 'utf-8',
'formatter': 'standard',
},
'file_debug_handler': {
'level': 'DEBUG',
'class': 'logging.FileHandler', # 保存到文件
'filename': 'test.log', # 日志存放的路径
'encoding': 'utf-8', # 日志文件的编码
'formatter': 'test',
},
},
# 日志记录器
'loggers': {
'logger1': { # 导入时logging.getLogger时使用的app_name
'handlers': ['console_debug_handler'], # 日志分配到哪个handlers中
'level': 'DEBUG', # 日志记录的级别限制
'propagate': False, # 默认为True,向上(更高级别的logger)传递,设置为False即可,否则会一份日志向上层层传递
},
'logger2': {
'handlers': ['console_debug_handler', 'file_debug_handler'],
'level': 'INFO',
'propagate': False,
},
}
}
# 注:进行日志轮转的日志文件,不能和其他handler共用,不然会导致文件被占用无法更名而报错!

浙公网安备 33010602011771号