模块

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('好好的 不要浮躁 努力就有收获')

###

posted @   shangxin_bai  阅读(171)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示