一、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期\day22\bbb') 解压缩 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'))
四、日志模块
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的日志格式