模块
os模块
import os # operate system
# 1. 如何创建文件夹
# make directory
# 如果文件夹已经存在,那么创建同名文件夹会报错,所以,在创建文件夹的时候,最好判断一下文件夹是否存在?
# os.mkdir('aaa')
# 不能连续创建文件夹,不支持递归创建文件夹
# os.mkdir('bbb\ccc\ddd')
# 可以一次性创建多个文件夹
# os.makedirs('bbb\ccc\ddd')
# 删除文件夹, 文件夹如果不为空,不能直接删除,保证数据安全
# os.removedirs('bbb')
# os.rmdir('aaa') # 只能删除一个
# 重点, 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
# print(os.listdir('D:\python36'))
# for i in os.listdir('D:\python36'):
# os.remove('111')
# os.rename('bbbb','cccc')
# os.system('dir')
# print(os.getcwd()) # pwd
# change directory
# os.chdir('D:\django\day21\cccc') # cd D:\django\day21\cccc
# os.path
# path = os.path.abspath(__file__)
# D:\django\day21\01 os模块.py
# print(os.path.abspath(__file__) )# 返回path规范化的绝对路径
# res=os.path.split(path) # 将path分割成目录和文件名二元组返回
# print(res)
# print(__file__)
# print(os.path.dirname(__file__))
# print(os.path.dirname(os.path.dirname(__file__)))
# print(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
# print(os.path.basename(__file__))
# 既可以判断文件夹也可以判断文件是否存在
# res=os.path.exists(r'D:\django\day21\02 os模块.py')
# print(res)
# 判断文件是否存在
# res=os.path.isfile(r'D:\django\day21')
# print(res)
# res=os.path.isdir(r'D:\django\day22')
# print(res)
# 拼接路径的
# os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
# D:\django\day21\ccc \\\ //////
# res='D:\django\day21' + '\\' + 'ccc'
# print(res)
# /////
# 重要
# res=os.path.join('D:\django\day21', 'cccc', 'dddd','eeee')
# print(res)
# 返回文件的字节数
res=os.path.getsize(r'D:\django\day21\1.py') # 返回path的大小
print(res) # 2174 字节数
sys模块
import sys
# 必须掌握
# print(sys.argv)
# print(sys.argv[1])
# print(sys.argv[2])
# print(sys.argv[3])
# 1, 2 3 4 5 6 7 8 9 10 11 12
# 导出数据的代码已经写好了
month = ''
# 查看python解释器的版本
print(sys.version)
# print(sys.path)
# sys.path.append('')
print(sys.platform)
序列化模块
# 什么是json格式的数据?
进行跨语言数据传输
{'a':1}
# 序列化:把其他数据类型转为字符串的过程
# 反序列化:把字符串转为其他数据类型的过程
import json
# json.dumps()
# json.dump()
#
# json.loads()
# json.load()
# user_dict = {"username": "jason"} # {'username': 'jason'}
# print(user_dict, type(user_dict)) # dict {'username': 'jason'}
# print(user_dict)
# 序列化字典
# json_str=json.dumps(user_dict) #
# print(json_str, type(json_str)) # {"username": "jason"} # json格式的数据最大特征就是双引号
# 反序列化
# res = json.loads(json_str)
# print(res, type(res))
'''
json.dumps json.loads
'''
# json.dump json.load
# 把一个字典写入到文件中,并且,读取出来的时候,还要是字典
# 只能是字符串或者二进制才能写入到文件中
# user_dict = {"username": "jason"}
# with open('a.txt', 'w', encoding='utf-8') as f:
# data = json.dumps(user_dict)
# f.write(data)
# with open('a.txt', 'r', encoding='utf-8') as f:
# print(f.read(), type(f.read()))
# with open('b.txt', 'w', encoding='utf-8') as f:
# json.dump(user_dict, f) # 1.序列化成字符串,2.写入文件
# with open('b.txt', 'r', encoding='utf-8') as f:
# data=json.load(f) # 1. 先读文件,2. 反序列化
# print(data, type(data))
'''
json.dump json.load
'''
# 看源码,学习新东西
user_dict = {'aaa': 'hello洋哥最帅'}
# print(json.dumps(user_dict, ensure_ascii=False))
# 对象
# pickle 能够序列化所有的数据类型,序列化之后的结果是二进制
import pickle
res = pickle.dumps(user_dict)
# print(pickle.dumps(user_dict))
print(pickle.loads(res))
hashlib模块
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等
md5
sha1 sha256
'''
它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
'''
"""
import hashlib
#
# md5 = hashlib.md5() # 代表使用md5算法
# md5.update('helloworld'.encode('utf-8')) # 需要加密的数据
# # 加密之后的结果
# res=md5.hexdigest()
# print(res) # e10adc3949ba59abbe56e057f20f883e
# 25f9e794323b453885f5181f1b624d0b
# e6146c39480b65b8f5dee7b93049db99
'''1. 被加密的数据必须是二进制
2. 被加密的数据可以分多次传递
'''
# md5 = hashlib.md5() # 代表使用md5算法
# md5.update('h'.encode('utf-8')) # 需要加密的数据
# md5.update('e'.encode('utf-8')) # 需要加密的数据
# md5.update('l'.encode('utf-8')) # 需要加密的数据
# md5.update('l'.encode('utf-8')) # 需要加密的数据
# md5.update('o'.encode('utf-8')) # 需要加密的数据
# md5.update('world'.encode('utf-8'))
# # 加密之后的结果
# res=md5.hexdigest()
# print(res) # fc5e038d38a57032085441e7fe7010b0
# fc5e038d38a57032085441e7fe7010b0
# fc5e038d38a57032085441e7fe7010b0
# 936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af
# 加盐:进一步保证数据的安全性
md5 = hashlib.md5()
# 定义一个盐(随机的一个字符串)
salt = '!@#¥%'
s = salt+'123456'
md5.update(s.encode('utf-8'))
res=md5.hexdigest()
print(res)
'''密文不能反解出明文'''
# 比固定盐就更加安全了
# 加随机盐
# qaz
# qwe
# 123
# qwertyu
logging日志模块
'''日志内容很多,掌握的很少,你只需要学会如何使用,或者你只需要认识就行,在或者你只学会如何copy'''
日志等级
import logging
logging.debug('debug message') 10
logging.info('info message') 20
logging.warning('warning message') 30
logging.error('error message') 40
logging.critical('critical message') 50
配置字典
# 核心就在于CV
import logging
import logging.config
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
logfile_path = 'a3.log'
# log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {}, # 过滤日志
'handlers': {
#打印到终端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
#打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': logfile_path, # 日志文件
'maxBytes': 1024*1024*5, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
#logging.getLogger(__name__)拿到的logger配置 空字符串作为键 能够兼容所有的日志
'': {
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递
}, # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
},
}
# 使用配置字典
logging.config.dictConfig(LOGGING_DIC) # 自动加载字典中的配置
logger1 = logging.getLogger('xxx')
logger1.debug('好好的 不要浮躁 努力就有收获')
###
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现