今日内容:

一、常用模块 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. 日版iphone5 SB 配合REBELiOS卡贴破解电信3G步骤

    1.插入贴膜卡和sim卡:进入“设置—电话—sim卡应用程序”选择CDMA电信解锁: 2.越狱设备,添加cydia.gpplte.com源,安装“6S/6/5S/5C/5电信新补丁”: 3.打卡gpp ...

  2. richedit缩放

    本程序下载地址: 要使文本在richedit控件上进行放大缩小,可以通过设置字体的大小,从而来达到缩放文本的目的. 下面是一个例子:通过调整滚动条,从而控制richedit文本缩放. 程序运行结果如下 ...

  3. java高级-动态注入替换类Instrumentation

    介绍 利用java.lang.instrument(容器类) 做动态 Instrumentation(执行容器) 是 Java SE 5 的新特性. 使用 Instrumentation,开发者可以构 ...

  4. asp.net core 2.1认证

    asp.net core 2.1认证 这篇文章基于asp.net core的CookieAuthenticationHandler来讲述. 认证和授权很相似,他们的英文也很相似,一个是Authenti ...

  5. centos值cron-计划任务

    一.crond简介 crond是Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具.并且会自动启动cro ...

  6. Javaweb项目 利用JSP响应浏览器

    一.javaweb  数据访问流程? 1.浏览器 http 访问服务器 找到 servlet(HttpServeltDemo.java文件) 2.servle 通过dao 访问数据库 数据库将数据返回 ...

  7. 语义SLAM研究现状总结

    博客转载自:https://blog.csdn.net/xiaoxiaowenqiang/article/details/81051010 原文标题:深度学习结合SLAM 语义slam 语义分割 端到 ...

  8. Java BitSet使用场景和示例

    一.什么是BitSet? 注:以下内容来自JDK API: BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个boolean值.用非负的整数将BitSet的位编入索引.可以对每个编 ...

  9. 使用with语句优化pymysql的操作

    一.with语句的好处 with语句的好处在于,它可以自动帮我们释放上下文,就比如文件句柄的操作,如果你不使用with语句操作,你要先open一个文件句柄,使用完毕后要close这个文件句柄,而使用w ...

  10. jQuery初识之选择器、样式操作和筛选器(模态框和菜单示例)

    一.jQuery 1.介绍 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架). jQuery设计的 ...