今日内容:

一、常用模块 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. ansible 初探nginx安装

    我的配置: /etc/hosts: /etc/ansible/hosts: nglinx安装包: ansible自动化安装nginx: 1.安装ansible. 2.创建目录结构: mkdir -p ...

  2. 【转】让itunes下载加速的真正办法,转向至香港台湾澳门苹果服务器 -- 不错不错!!!

    原文网址:http://bbs.feng.com/read-htm-tid-2397269.html 今天,看了一个这个帖子是改dns的,http://bbs.feng.com/read-htm-ti ...

  3. Python3 列表

    list是一种有序的集合,可以随时添加和删除其中的元素. >>> classmates = ['Michael', 'Bob', 'Tracy'] >>> clas ...

  4. ORACLE的RMAN

    1.什么是RMAN? RMAN可以用来备份和还原数据库文件.归档日志和控制文件.它也可以用来执行完全或不完全的数据库恢复. 注意:RMAN不能用于备份初始化参数文件和口令文件. RMAN启动数据库上的 ...

  5. iphone真机开发流程之--证书申请

    一.申请 1.进入ios开发者中心 http://www.apple.com.cn/developer/ios/index.html 2.点击登录 输入用户名和密码(前提:已经有Apple ID,且花 ...

  6. url,href,src之间的区别

    发现自己居然没把url.href.src关系及使用搞清楚,今天就理一下.主要包括:url.src.href定义以及使用区别. URL(Uniform Resource Locator) 统一资源定位符 ...

  7. java界面--WePush-master 项目跑起来 -碰到的问题

    仅能在IntelliJ里面打开GUI Form文件来进行界面的拖拽设计--eclipse中也可以了 当eclipse 打开.form文件时,提示有.对应的编辑工具可以打开它,请到市场去安装 但是:本人 ...

  8. web爬虫,BeautifulSoup

    BeautifulSoup 该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查找指定元素,从而使得在HTML或XML中查找指定元素变得简单. 1 2 3 ...

  9. vue组件通信新姿势

    在vue项目实际开发中我们经常会使用props和emit来进行子父组件的传值通信,父组件向子组件传递数据是通过prop传递的, 子组件传递数据给父组件是通过$emit触发事件来做到的.例如: Vue. ...

  10. 【TCP/IP】二、协议的概念

    一.概念 1.tcp/ip是通信协议的统称. 2.协议就是计算机与计算机之间通过网络实现通信时,事先达成的一种约定.这种约定,使那些不同厂商的设备,不同的CPU以及不同的操作系统组成的计算机之间,只要 ...