shutil模块,shevle与xml模块,configerparser模块,logging模块

一、shutil模块

高级的 文件、文件夹、压缩包 处理模块

1、shutil.copyfileobj(fsrc, fdst[, length])  将文件内容拷贝到另一个文件中

2、shutil.copyfile(src, dst) 拷贝文件

3、shutil.copymode(src, dst) 仅拷贝权限。内容、组、用户均不变
4、shutil.copystat(src, dst) 仅拷贝状态的信息,包括:mode bits, atime, mtime, flags
5、shutil.copy(src, dst)拷贝文件和权限
6、shutil.copy2(src, dst)拷贝文件和状态信息
7、shutil.ignore_patterns(*patterns)
  shutil.copytree(src, dst, symlinks=False, ignore=None) 递归的去拷贝文件夹
8、shutil.rmtree(path[, ignore_errors[, onerror]])递归的去删除文件

import shutil
#递归的去移动文件,它类似mv命令,其实就是重命名。
#shutil.move(src, dst)
 shutil.move('aaa','eee')
 shutil.move('aaa','bbb')

压缩
import shutil
 ret = shutil.make_archive("xxx", 'gztar', root_dir=r'D:python全栈15期day22')
 print(ret)

压缩
import shutil
 ret = shutil.make_archive("bbb_bak", 'gztar', root_dir=r'D:python全栈15期day22bb')

解压缩
 import tarfile

 t=tarfile.open('bbb_bak.tar.gz','r')
 t.extractall('.')
t.close()

二、shevle与xml模块

 1、shelve模块(序列化)比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型

        但局限性很强

import shelve

f=shelve.open('db.shl')

# f['info']={"name":"egon","age":18}

print(f['info']['name'])

f.close()

2、xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,清晰,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

三、configerparser模块(*****)

 专业解析某种配置文件

之前我们学的settings.py配置文件low,不专业。

碰到:.ini   .cfg  .cnf结尾的配置文件,一般解析都是用此模块

# 注释1
; 注释2

[section1]
k1 = v1
k2:v2
user=egon
age=18
is_admin=true
salary=31

[section2]
k1 = v1

读取:

import configparser

config=configparser.ConfigParser()
config.read('a.cfg')

#查看所有的标题
res=config.sections() #['section1', 'section2']
print(res)

#查看标题section1下所有key=value的key
options=config.options('section1')
print(options) #['k1', 'k2', 'user', 'age', 'is_admin', 'salary']

#查看标题section1下所有key=value的(key,value)格式
item_list=config.items('section1')
print(item_list) #[('k1', 'v1'), ('k2', 'v2'), ('user', 'egon'), ('age', '18'), ('is_admin', 'true'), ('salary', '31')]

#查看标题section1下user的值=>字符串格式
val=config.get('section1','user')
print(val) #egon

#查看标题section1下age的值=>整数格式
val1=config.getint('section1','age')
print(val1) #18

#查看标题section1下is_admin的值=>布尔值格式
val2=config.getboolean('section1','is_admin')
print(val2) #True

#查看标题section1下salary的值=>浮点型格式
val3=config.getfloat('section1','salary')
print(val3) #31.0

改写(了解):一般人不会改,除非运维人员会修改

import configparser

config=configparser.ConfigParser()
config.read('a.cfg',encoding='utf-8')


#删除整个标题section2
config.remove_section('section2')

#删除标题section1下的某个k1和k2
config.remove_option('section1','k1')
config.remove_option('section1','k2')

#判断是否存在某个标题
print(config.has_section('section1'))

#判断标题section1下是否有user
print(config.has_option('section1',''))


#添加一个标题
config.add_section('egon')

#在标题egon下添加name=egon,age=18的配置
config.set('egon','name','egon')
config.set('egon','age',18) #报错,必须是字符串


#最后将修改的内容写入文件,完成最终的修改
config.write(open('a.cfg','w'))

四、logging模块

 1、日志级别

CRITICAL = 50 #FATAL = CRITICAL
ERROR = 40
WARNING = 30 #WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0 #不设置

2、默认级别为warning,默认打印到终端

import logging

logging.debug('调试debug')
logging.info('消息info')
logging.warning('警告warn')
logging.error('错误error')
logging.critical('严重critical')

'''
WARNING:root:警告warn
ERROR:root:错误error
CRITICAL:root:严重critical

3、记住

import logging

# # 一:日志配置
# logging.basicConfig(
#     # 1、日志输出位置:1、终端 2、文件
#     filename='access.log', # 不指定,默认打印到终端
#
#     # 2、日志格式
#     format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
#
#     # 3、时间格式
#     datefmt='%Y-%m-%d %H:%M:%S %p',
#
#     # 4、日志级别
#     # critical => 50
#     # error => 40
#     # warning => 30
#     # info => 20
#     # debug => 10
#     level=30,
# )
#
# logging.debug('1111')
# logging.info('2222')
# logging.warning('33333')
# logging.error('4444')
# logging.critical('5555')
#

# 二:日志配置字典
import logging.config
import settings

logging.config.dictConfig(settings.LOGGING_DIC)

# logger1=logging.getLogger('用户交易')

# logger1.info("egon给alex转了三个亿")

# logger2=logging.getLogger('xxx')
# logger2.info("egon给lqz转了三个亿")


logger3=logging.getLogger('yyy')
logger3.info("egon给刘玉转了三个亿")

4、使用

import settings

# !!!强调!!!
# 1、logging是一个包,需要使用其下的config、getLogger,可以如下导入
# from logging import config
# from logging import getLogger

# 2、也可以使用如下导入
import logging.config # 这样连同logging.getLogger都一起导入了,然后使用前缀logging.config.

# 3、加载配置
logging.config.dictConfig(settings.LOGGING_DIC)

# 4、输出日志
logger1=logging.getLogger('用户交易')
logger1.info('egon儿子alex转账3亿')

# logger2=logging.getLogger('专门的采集') # 名字传入的必须是'专门的采集',与LOGGING_DIC中的配置唯一对应
# logger2.debug('专门采集的日志'

5、记住

#logger:产生日志的对象

#Filter:过滤日志的对象

#Handler:接收日志然后控制打印到不同的地方,FileHandler用来打印到文件中,StreamHandler用来打印到终端

#Formatter对象:可以定制不同的日志格式对象,然后绑定给不同的Handler对象使用,以此来控制不同的Handler的日志格式
原文地址:https://www.cnblogs.com/guojieying/p/13420333.html