day 16

os模块

os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口,多用于文件处理

对文件操作

import os

# 判断是否为文件
res = os.path.isfile(r' ')
print(res)

# 删除文件
os.remove(r' ')

# 重命名文件
os.rename(r' ',r' ')

对文件夹操作

import os

# 对文件夹操作

## 判断是否为文件夹
os.path.isdir()

## 创建文件夹
os.mkdir(r' ')

## 删除文件夹
os.redir(r' ')

## 列出文件夹内所有的文件(重要)
res = os.listdir(r' ')
print(res)

# 辅助性的

## 当前文件的所在的文件夹
res = os.getcwd()
print(res)

## 当前文件所在的具体路径
## __file__ pycharm独有
print(' __file__ :', __file__ )
res = os.path.abpath(__flie__) # 根据不同的操作系统,跟换不同的/或
print(res)

## 文件的文件夹
res = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
print(res)

## 拼接文件路径
res = os.path.join(os.path.dirname(os.path.abspath(__file__))
print(res)
                   
## 判断路径是否存在(文件or文件夹适用)
res = os.path.exists(r'')
                   
# 了解
                  
## 执行终端代码
res = os.system('dir')
print(res)           

sys模块

最常用

当使用命令行式运行文件,接收多余的参数

import sys

res = sys.argv
print(res)


# import requests
print(sys.modules.key())

# requests = __import__ ('requests')


# 了解
print(sys.api_version)

print(sys.copyright)

print(sys.version)

print(sys.hexversion)

json和pickle模块

序列化

按照特定的规则排列(json串--》跨平台交互,传输数据)

反序列化

按照特定的规则把json串转换成python/java/c/php需要的数据类型

json模块

跨平台数据交互,json串

import json

dic = [1,(1,2)]

res = json.dumps(dic) # json串中没有单引号
print(type(res),res)  # 跨平台数据交互

res = json.loads(res)
print(type(res).res)


dic = {'a': True,'b': None}

# 序列化字典为json串,并保存文件
import json
def dic():
    print('func')
   
with open('test.json','w',encoding='utf8')as fw:
    json.dump(dic,fw)
   
# 反序列化
with open('test.json','r',encoding='utf8')as fr:
	data = json.load(fr)
    print(type(data),data)
   
goods = {
    1:'wawa',
}

with open('nick.json','r',encoding='utf8')as fr:
    data = json.load(fr)
    data['wawa'] = 1
    data['extra'] -= 10
    data['locked'] = 1
   
with open('nick.json','w',encoding='utf8')as fw:
    json.dump(data.fw)
     

pickle模块

不跨平台,针对python所有数据类型,如集合,使用方式和json一模一样.

import pickle	# --》未来存对象(存对象名)

def func():		# 针对地址而言,只存了一个函数名
    print('func')
   
with open('test.pkl','wb')as fw:
    pickle.dump(func,fw)
   
def func():
    print()
   
with open('test.pkl','rb')as fr:
    data = pickle.load(fr)
    print(type(data),data)
    data() # func()
    

logging 模块

低配logging

日志总共分为以下五个级别,这五个级别自下而上进行匹配 debug-->info-->warning-->error-->critical,默认最低级别为warning

v1

import logging

logging.debug('调试信息')
logging.info('正常信息')
logging.warning('警告信息')
logging.error('报错信息')
logging。critical('严重错误信息')
WARNING:root:警告信息
ERROR:root:报错信息
CRITICAL:root:严重错误信息        

v1版本无法指定日志的级别;无法指定日志的格式;只能往屏幕打印,无法写入文件。

v2

import logging

# 日志的基本配置

logging.basicConfig(filename='access.log',
                    format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S %p',
                    level=10)

logging.debug('调试信息')  # 10
logging.info('正常信息')  # 20
logging.warning('警告信息')  # 30
logging.error('报错信息')  # 40
logging.critical('严重错误信息')  # 50
可在logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:
    
filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
format:指定handler使用的日志显示格式。
datefmt:指定日期时间格式。
level:设置rootlogger(后边会讲解具体概念)的日志级别
stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。


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 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s用户输出的消息

v2版本不能指定字符编码:只能往文件中打印

v3

logging模块包含四种角色:logger、filter、formatter对象、handler

1.logger:产生日志的对象。

2.filter:过滤日志的对象

3.formatter对象:可以定制不同的日志格式对象,然后绑定给不同的handler对象使用,以此来控制不同的handler的日志格式

4.handler:接收日志然后控制打印到不同的地方,filehandler用来打印到文件中,streamhandler用来打印到终端

# 自定义配置

# 1. 配置logger对象
nick_logger = logging.Logger('nick')
json_logger = logging.Logger('jason')

# 2. 配置格式
formmater1 = logging.Formatter('%(asctime)s - %(name)s -%(thread)d - %(levelname)s -%(module)s:  %(message)s',
                               datefmt='%Y-%m-%d %H:%M:%S %p ', )

formmater2 = logging.Formatter('%(asctime)s :  %(message)s',
                               datefmt='%Y-%m-%d %H:%M:%S %p', )

formmater3 = logging.Formatter('%(name)s %(message)s', )

# 3. 配置handler --> 往文件打印or往终端打印
h1 = logging.FileHandler('nick.log')
h2 = logging.FileHandler('json.log')
sm = logging.StreamHandler()

# 4. 给handler配置格式
h1.setFormatter(formmater1)
h2.setFormatter(formmater2)
sm.setFormatter(formmater3)

# 5. 把handler绑定给logger对象
nick_logger.addHandler(h1)
nick_logger.addHandler(sm)
json_logger.addHandler(h2)

# 6. 直接使用
nick_logger.info(f'nick 购买 变形金刚 4个')
# json_logger.info(f'json 购买 变形金刚 10个')

原文地址:https://www.cnblogs.com/colacheng0930/p/11600886.html