Python 入门基础15 --shutil、shelve、log常用模块2、项目结构

时间:2022-09-24 17:56:34

今日内容:

一、常用模块 2019.04.10 更新

  • 1.time:时间
  • 2.calendar:日历
  • 3.datatime:可以运算的时间
  • 4.sys:系统
  • 5.os:操作系统
  • 6.os.path:系统路径操作
  • 7.random:随机数
  • 8.json:序列化
  • 9.pickle:序列化

二、常用模块2 2019.04.11 更新

  • 1.shutil:可以操作权限的处理文件模块
  • 2.shelve:可以用字典存取数据到文件
  • 3.标准输入输出错误流
  • 4.日志模块
  • 5.项目开发结构

1.shutil:可以操作权限的处理文件模块

import shutil
# ----------------------------------
# 基于路径的文件复制
# 拷贝文件的格式:(参数列表:目标源文件,目的地址文件)
# 拷贝文件无返回值,直接在目录里面出现新的文件 shutil.copyfile('aa.txt', 'bb.txt') # ----------------------------------
# 基于流的文件复制
# 语法就是,两个open ,第一个是读源文件,第二个是写到新文件中
# 通过shutil.copyfileobj(r, w)完成操作 with open('aa.txt', 'rb') as r, open('cc.txt', 'wb') as w:
shutil.copyfileobj(r, w) # ----------------------------------
# 递归删除目标目录
# 很干脆,一删全没了,全没了
# 参数是 目标目录的地址 shutil.rmtree('to_del') # ----------------------------------
# 文件移动
# shutil.move(src,dst)
# 参数:第一个而是要移动的文件,第二个是目的地址路径 shutil.move('aa.txt', 'to_del') # ----------------------------------
# 文件夹压缩
# shutil.make_archive(base_name, format) # 目标文件,压缩格式 # shutil.make_archive('aa.txt', 'tar') # ----------------------------------
# 文件夹解压
# 第一个参数:文件名 ,后面的参数可以不填
# unpack_archive(filename, extract_dir=None, format=None) shutil.unpack_archive('aa.txt.zip')

2.shelve:可以用字典存取数据到文件

import shelve
# ----------------------------------
# 将序列化文件操作dump与load进行封装
# 注:writeback允许序列化的可变类型,可以直接修改值
# ---------------------------------- # 后面的writeable表示,在更改内存里面的数据的同时,更新文件里面的数据
# s_dic = shelve.open("target_file", writeback=True) s_dic = shelve.open("2.py") # ----------------------------------
# 序列化:存
print(s_dic) # 当点亮writeback的时候,可以更新文件里面的值
# s_dic['key1'] = 'value1'
# s_dic['key2'] = 'value2' # ----------------------------------
# 反序列化:取
print(s_dic['key1']) # ----------------------------------
# 文件这样的释放
s_dic.close()

3.标准输入输出错误流

import sys
# ----------------------------------
# print默认是对sys.stdout.write('msg') + sys.stdout.write('\n')的封装
# 格式化结束符print:print('msg', end='')
# 输出,
sys.stdout.write('msg') # 输出 error 格式的 message
sys.stderr.write('msg') # 读取输入一行的内容
msg = sys.stdin.readline()
print(msg) # 上面所有的内容打印的东西:
# 451ihi # 输入的内容
# msgmsg451ihi # 异步执行,不知道打印先后顺序

4.日志模块

4.1 logging:日志模块
1) root logging的基本使用:五个级别
2)root logging的基本配置:logging.basicConfig()
3)logging模块四个核心:Logger | Filter | Handler | Formater
4)logging模块的配置与使用
-- 配置文件:LOGGING_DIC = {}
-- 加载配置文件:logging.config.dictConfig(LOGGING_DIC) => logging.getLogger('log_name')
4.2 日志级别
    NOTSET : 0  # 不设置
DEBUG : 10
INFO : 20
WARNING: 30 # WARN = WARNING
ERROR : 40
CRITICAL:50 # FATAL = CRITICAL 默认级别为warning,默认打印到终端
# 测试打印不同级别的log
import logging
logging.debug("调试 debug")
logging.info("信息 info")
logging.warning("警告 warn")
logging.error("错误 error")
logging.critical("严重 critical")
logging.warning("--------------------华丽分割线--------------------------") # 默认情况下,设置的级别为warning,所以debug和info的信息是打不出来的
# 类型 用户 内容
# 打印结果:
'''
WARNING:root:警告 warn
ERROR:root:错误 error
CRITICAL:root:严重 critical
'''
4.3 配置logging.basicConfig()函数
# 为logging模块指定全局配置,针对所有logger有效,控制打印到文件中

在logging.basicConfig()函数中通过具体参数来更改logging模块默认行为,可用参数有

'''
1) filename:指定的文件创建FiledHandler(句柄)
2) filemode:文件打开方式,在指定了filename时会使用这个参数,默认值为'a'还可以为'w'
3) format:指定handler使用的日志显示格式
4) datefmt:指定日期时间格式
5) level:设置rootlogger的日志级别
6) stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。
若同时列出了filename和stream两个参数,则stream参数会被忽略。 '''
4.4 format格式关键字
# 格式:
%(name)s:Logger的名字,并非用户名
%(levelno)s:数字形式的日志级别
%(levelname)s:文本形式的日志级别
%(pathname)s:调用日志输出函数的模块的完整路径名,可能没有
%(filename)s:调用日志输出函数的模块的文件名
%(module)s:调用日志输出函数的模块名
%(funcName)s:调用日志输出函数的函数名
%(lineno)d:调用日志输出函数的语句所在的代码行
%(created)f:当前时间,用UNIX标准的表示时间的浮点数标识
%(relativeCreated)d:输出日志信息时的,自Logger创建以来的毫秒数
%(asctime)s:字符串形式的当前时间。默认格式是'2019-04-11 16:49:45,896'。逗号后面的是毫秒
%(thread)d:线程ID。可能没有
%(threadName)s:线程名。可能没有
%(process)d:进程ID。可能没有
%(message)s:用户输出的消息
4.5 测试定制格式输出log
import logging
logging.basicConfig(
filename='test.log',
format='%(levelname)s: %(asctime)s - %(filename)s -%(module)s : %(message)s ',
datefmt='%Y - %m - %d %H:%M:%S',
level=10
)
logging.debug("调试 debug")
logging.info("信息 info")
logging.warning("警告 warn")
logging.error("错误 error")
logging.critical("严重 critical") # -----------------------------------------------
# 打印结果:
# 此处由于设置了level为10,所以才能打印出了五条信息 DEBUG: 2019 - 04 - 11 16:05:04 - log模块.py -log模块 : 调试 debug
INFO: 2019 - 04 - 11 16:05:04 - log模块.py -log模块 : 信息 info
WARNING: 2019 - 04 - 11 16:05:04 - log模块.py -log模块 : 警告 warn
ERROR: 2019 - 04 - 11 16:05:04 - log模块.py -log模块 : 错误 error
CRITICAL: 2019 - 04 - 11 16:05:04 - log模块.py -log模块 : 严重 critical
4.6 log文件配置
# ------------日志的四个对象---------------
1) logger:产生日志的对象
2) Filter:过滤日志的对象
3) Handler:接收日志,然后控制打印到不同的地方,FileHandler用来打印到文件中,StreamHandler用来打印到终端
4) Formatter对象:可以定制不同的日志格式对象,然后给不同的Handler对象使用,以此来控制不同的Handler的日志格式 # ------------详细配置过程-------------------- import logging # 1.logger对象:负责产生日志,然后交给Filter过滤,然后交给不同的Handler输出
logger = logging.getLogger(__file__) # 2.Filter对象:不常用 # 3.Handler对象:接收logger传来的日志,然后控制输出
h1 = logging.FileHandler('t1.log') # 打印到文件
h2 = logging.FileHandler('t2.log') # 打印到文件
h3 = logging.StreamHandler() # 打印到终端 # 4.Formatter对象:日志格式
formater1 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',\
datefmt='%Y-%m-%d %H:%M:%S %p')
formater2 = logging.Formatter('%(asctime)s : %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p')
formater3 = logging.Formatter('%(%(name)s : %(message)s') # 5.为Handler对象绑定格式
h1.setFormatter(formater1)
h2.setFormatter(formater2)
h3.setFormatter(formater3) # 6.将Handler添加给logger并设置日志级别
logger.addHandler(h1)
logger.addHandler(h2)
logger.addHandler(h3)
logger.setLevel(10) #7、测试
logger.debug('debug')
logger.info('info')
logger.warning('warning')
logger.error('error')
logger.critical('critical')
4.7 常用模板
import logging

# 其中name为getlogger指定的名字
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
logfile_path = "配置文件路径" 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', # 日志文件的编码
},
},
'loggers': {
# logging.getLogger(__name__)拿到的logger配置
'aa': {
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递
},
},
}

5.项目开发结构

--ATM
--bin : 存放可执行文件,项目的入口
--conf :存放项目的配置信息
--core :存放项目的核心代码
--db :数据处理相关的代码
--lib :库,存放公共模块
--log :日志文件

Python 入门基础15 --shutil、shelve、log常用模块2、项目结构的更多相关文章

  1. Greenplum入门——基础知识、安装、常用函数

    Greenplum入门——基础知识.安装.常用函数 2017年10月08日 22:03:09 在咖啡里溺水的鱼 阅读数:8709    版权声明:本文为博主原创,允许非商业性质转载但请注明原作者和出处 ...

  2. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  3. Python 入门基础6 --字符编码、文件操作1

    今日内容: 1.字符编码 2.字符与字节 3.文件操作 一.字符编码 了解: cpu:将数据渲染给用户 内存:临时存放数据,断电消失 硬盘:永久存放数据,断电后不消失 1.1 什么是编码? 人类能够识 ...

  4. Python入门基础学习 二

    Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...

  5. Python入门基础学习 一

    Python入门基础学习 一 Python下载及安装 下载地址:https://www.python.org/,选择最新的版本下载 稍等一会,安装完成. 简单语句 从idle启动Python:IDLE ...

  6. 进击的Python【第五章】:Python的高级应用(二)常用模块

    Python的高级应用(二)常用模块学习 本章学习要点: Python模块的定义 time &datetime模块 random模块 os模块 sys模块 shutil模块 ConfigPar ...

  7. Ansible入门笔记(2)之常用模块

    目录 Ansible常用模块 1.1.Ansible Ad-hoc 1.2.Ansible的基础命令 1.3.常用模块 Ansible常用模块 1.1.Ansible Ad-hoc 什么事ad-hoc ...

  8. Python 入门基础14 --time、os、random、json、pickle 常用模块1

    今日内容: 一.常用模块 2019.04.10 更新 1.time:时间 2.calendar:日历 3.datetime:可以运算的时间 4.sys:系统 5.os:操作系统 6.os.path:系 ...

  9. Python基础(正则、序列化、常用模块和面向对象)-day06

    写在前面 上课第六天,打卡: 天地不仁,以万物为刍狗: 一.正则 - 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法: - 在线正则工具:http://tool ...

随机推荐

  1. 20141214--C#父类,子类

    首要: 子类 包含父类的所有的属性方法 所有子类都可以直接转化成父类类型 当父类类型变量里面存的是某个子类的对象的时候,才能转化成那个子类类型. 父类与子类的装换: Ren r = new Ren() ...

  2. WPF学习05:2D绘图 使用Transform进行控件变形

    在WPF学习04:2D绘图 使用Shape绘基本图形中,我们了解了如何绘制基本的图形. 这一次,我们进一步,研究如何将图形变形. 例子 一个三角形,经Transform形成组合图形: XAML代码: ...

  3. TIBCO ActiveMatrix BPM 生成daa包脚本

    Ant 配置: <?xml version="1.0" encoding="UTF-8" ?> <project name="pro ...

  4. split

    import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; /** * 解析知网文章的页面 ...

  5. NIOH

    目录 NIOH中的双刀与阴阳术的应用 作战准备篇 2周目毕业装备: 加点: 双刀: 核心技能: 还行的技能: 被动技能: 忍术: 阴阳术: 必学: 选学: 守护灵: 隐世茶室 & 铁匠铺 出发 ...

  6. layer&period;load&lpar;&rpar;加载层如何加入文字描述

    https://fly.layui.com/jie/3586/ https://www.layui.com/doc/modules/layer.html#layer.load //loading层va ...

  7. 初学者的React全家桶完整实例

    概述 该项目还有些功能在开发过程中,如果您有什么需求,欢迎您与我联系.我希望能够通过这个项目对React初学者,或者Babel/webpack初学者都有一定的帮助.我在此再强调一下,在我写的这些文章末 ...

  8. Confman - 针对「Node 应用」的配置文件加载模块

    一句话介绍 confman 是一个强大的配置文件加载器,无论你喜欢 yaml .cson.json.properties.plist.ini.toml.xml 还是 js,都能满足你的愿望,并且更加简 ...

  9. windows Win7如何设置多用户同时远程登录

    windows  Win7如何设置多用户同时远程登录 1.创建一个用户 密码永不过期 2.在本地组策略编辑器里面,依次展开计算机配置--->管理模板--->Windows组件---> ...

  10. 吴恩达深度学习 反向传播(Back Propagation)公式推导技巧

    由于之前看的深度学习的知识都比较零散,补一下吴老师的课程希望能对这块有一个比较完整的认识.课程分为5个部分(粗体部分为已经看过的): 神经网络和深度学习 改善深层神经网络:超参数调试.正则化以及优化 ...