Python笔记1.2(open、logging、os、shutil、glob、decode、encode、pickle、tqdm)
Python笔记1.1(datetime、argparse、sys、overwrite、eval、json、os、zfill、endswith、traceback、深浅拷贝)
Python笔记2(函数参数、面向对象、装饰器、高级函数、捕获异常、dir)
@TOC
14、with open() as file和open()参数详解
with open() as file: 是 Python 中用于打开文件的语法结构。
with和as是 Python 的关键字,用于创建一个上下文环境,确保在离开该环境时资源能够被正确关闭或释放。open()是一个内置函数,用于打开文件并返回一个文件对象。
1 | |
open() 函数的各个参数的详细解释:
file:要打开的文件名(或文件路径)。可以是相对路径或绝对路径。mode(可选):打开文件的模式。它是一个字符串参数,默认值为'r'(只读模式)。常用的打开模式包括:'r':只读模式。文件从开头位置开始读取,默认模式。'w':写入模式。如果文件存在,则清空文件内容;如果文件不存在,则创建新文件进行写入。'x':独占创建模式。只写模式,用于创建新文件。如果文件已存在,则抛出FileExistsError异常。'a':追加模式。文件从末尾位置开始写入,如果文件不存在,则创建新文件。'b':二进制模式。以二进制形式读取或写入文件,用于处理非文本文件。't':文本模式(默认)。以文本形式读取或写入文件,用于处理文本文件。
buffering(可选):指定文件的缓冲策略。可以为整数值来指定缓冲区大小,或者使用-1(默认值)来选择默认的缓冲机制。encoding(可选):指定文件的编码格式。例如,'utf-8'、'latin-1'等。如果不指定该参数,在文本模式下将使用系统默认编码。errors(可选):指定编解码错误的处理方式。默认值为None,表示使用默认的错误处理机制。newline(可选):指定用于文本模式下换行符的转换方式。可以是None(默认值,保持系统默认),''(不进行转换),'\n'(将换行符转换为\n),'\r'(将换行符转换为\r)等。closefd(可选):定义当文件对象关闭时是否关闭与文件描述符相关的底层文件。默认值为True,表示关闭文件。opener(可选):用于自定义打开文件的底层实现的函数。
读写
1 | |
- writelines():写入的必须是列表类型。
- write():将一个字符串写入文件。
- readlines():可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
- readline():一次读取一行内容。
- read():读取文件中的所有内容,并返回一个字符串。
15、logging
- Logger:日志记录器,负责生成日志消息。
- Handler:处理器,负责将日志消息发送到不同的目的地(如控制台、文件等)。
- Formatter:格式化器,负责设置日志消息的格式。
- Filter:过滤器,负责过滤日志消息。
日志的等级
| 日志级别 | 使用场景 |
|---|---|
| DEBUG | 用于调试阶段,输出详细的调试信息,通常不会在生产环境中使用 |
| INFO | 用于输出程序运行的一般信息,例如程序启动、停止等 |
| WARNING | 用于输出警告信息,例如程序运行时出现了一些不严重的问题,但需要引起注意 |
| ERROR | 用于输出错误信息,例如程序运行时出现了一些严重的问题,需要及时处理 |
| CRITICAL | 用于输出严重的错误信息,例如程序崩溃、系统崩溃等,需要立即处理 |
logging.basicConfig(*kwargs)
| 参数名称 | 描述 |
|---|---|
| filename | 指定日志输出目标文件的文件名,指定该参数后日志信息就不会输出到控制台上 |
| filemode | 指定日志文件的打开模式,默认为’a’.需要注意的是,该选项要在filename被指定时才有效 |
| format | 指定日志格式字符串,即指定日志输出时所包含的字段信息以及它们的顺序 |
| datefmt | 指定日志记录中日期和时间的格式,该选项要在format中包含时间字段%(asctime)s时才有效 |
| level | 指定日志器的日志级别,小于该级别将不会输出 |
| stream | 指定日志输出目标stream,如sys.stdout、sys.stderr以及网络stream。需要说明的是,stream和filename不能同时提供,否则会引发 ValueError异常 |
| style | 指定format格式字符串的风格,可取值为’%‘、’{‘和’$‘,默认为’%’ |
format
| 字段/属性名称 | 使用格式 | 描述 |
|---|---|---|
| asctime | %(asctime)s | 日志事件发生的事时间 |
| levelname | %(levelname)s | 该日志记录的文字形式的日志级别(‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’, ‘CRITICAL’) |
| message | %(message)s | 日志记录的文本内容,通过 msg % args计算得到的 |
| pathname | %(pathname)s | 调用日志记录函数的源码文件的全路径 |
| filename | %(filename)s | pathname的文件名部分,包含文件后缀 |
| module | %(module)s | filename的名称部分,不包含后缀 |
| lineno | %(lineno)d | 调用日志记录函数的源代码所在的行号 |
| funcName | %(funcName)s | 调用日志记录函数的函数名 |
TimedRotatingFileHandler
1 | |
参数详解
log_file_path- 日志文件的主路径(如:
app.log) - 轮转后的文件会自动添加日期后缀(如:
app.log.2023-10-27)
- 日志文件的主路径(如:
when='midnight'- 轮转时间点:每天午夜 00:00
- 其他常用值:
'S'- 秒'M'- 分钟'H'- 小时'D'- 天'W0'- W6:每周(0=周一,6=周日)
interval=1- 轮转间隔:与
when配合使用,表示每1个时间单位轮转一次 - 例如
when='H', interval=6表示每6小时轮转一次
- 轮转间隔:与
backupCount=7- 保留的备份文件数量:保留最近7个日志文件(不含当前活动文件)
- 当生成新日志文件时,最旧的日志文件会被自动删除
encoding='utf-8'- 文件编码:强烈建议设置为 UTF-8,特别是在需要记录中文或其他非ASCII字符时
delay=0- 延迟文件创建:0表示立即创建日志文件
- 如果设置为 True(或非零值),则直到第一次写入日志时才创建文件
避免日志多写,重写
logging.shutdown()
logging.shutdown 是 Python logging 模块中的一个函数,用于确保所有日志记录器和处理器在程序结束前正确关闭。这在多线程或多进程环境中尤为重要,因为日志记录器和处理器可能在不同的线程或进程中使用。
功能说明
- 确保所有日志消息被处理:logging.shutdown 会等待所有日志消息被处理完毕,确保没有未完成的日志记录任务。
- 关闭所有处理器:它会关闭所有已注册的处理器,特别是文件处理器,确保文件被正确关闭。
- 清理资源:释放与日志记录相关的资源,防止资源泄漏。
使用场景
- 多线程或多进程环境:在多线程或多进程环境中,确保所有线程或进程的日志记录任务完成后再关闭程序。
- 程序正常退出:在程序正常退出前调用 logging.shutdown,确保所有日志消息被正确记录。
- 异常处理:在捕获到异常后,确保日志记录器正确关闭,避免资源泄漏。
logging.getLogger()
logging.getLogger() 是 Python logging 模块中的一个方法,用于获取或创建一个日志记录器。如果不提供名称参数,默认会返回根日志记录器(root logger)。根日志记录器是所有日志记录器的顶级记录器,如果没有其他记录器处理日志消息,根日志记录器会处理这些消息。
功能说明
- 获取或创建日志记录器:如果指定名称的日志记录器已经存在,则返回该记录器;如果不存在,则创建一个新的记录器并返回。
- 根日志记录器:如果不提供名称参数,logging.getLogger() 会返回根日志记录器。
1 | |
16、os、shutil、glob
os

返回上一层路径
os.path.abspath(os.path.join(path, os.paridr))
shutil

glob

查找指定的文件
想查找的文件名已知道,但目录在哪里不知道
1 | |
查找含有指定文件的内容
文件中包含某些关键字,但不知道文件名和所在路径
1 | |
批量修改目录中的文件名称
知道文件名需要修改的字符串
1 | |
批量查找并复制备份py脚本
1 | |
17、decode和encode
在 Python 中,字符串是以 Unicode 编码进行存储和操作的。Unicode 是一种字符集,为每个字符分配了唯一的数字编码,可以用于表示所有的字符集(包括 ASCII,拉丁文和其他字符集)。
在 Python 中,有两种主要的方法来将字符串转换为字节序列(编码)或将字节序列转换为字符串(解码):.encode() 和 .decode()。
.encode() 方法将字符串转换为字节序列,方法调用需要指定要使用的编码方式。例如,.encode('utf-8') 将字符串编码为以 UTF-8 编码的字节序列。返回一个 bytes 对象。
示例:
1 | |
输出:b'\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\x80\xe6\xae\xb5\xe4\xb8\xad\xe6\x96\x87\xe5\xad\x97\xe7\xac\xa6'
.decode() 方法将字节序列转换为字符串,调用需要指定要使用的编码方式。例如,.decode('utf-8') 将以 UTF-8 编码的字节序列转换为字符串。返回一个字符串。
示例:
1 | |
输出:这是一段中文字符
需要注意的是,调用 .encode() 或 .decode() 时需要指定相应的编码方式。不同的编码方式可能在字符编码转换上存在差异,使用不当可能导致数据损坏或解码错误。
另外,Python 中的 .encode() 和 .decode() 方法只适用于 Python 字符串和字节序列之间的转换。如果要进行文件读写等操作,需要使用相应的文件读写方法。例如使用 open() 函数时,需要指定相应的模式。例如 open('file.txt', 'w', encoding='utf-8') 表示使用 UTF-8 编码打开文件以进行写操作。
18、pickle
1. 保存数据
使用 pickle.dump 方法将对象保存到文件中。
1 | |
2. 加载数据
使用 pickle.load 方法从文件中加载对象。
1 | |
19、tqdm
tqdm 是一个在 Python 中常用的库,用于在循环中添加进度条,使长时间运行的任务更加直观。
- 进度条显示:可以在循环中显示进度条,支持多种自定义样式。
- 兼容性:适用于 for 循环、while 循环以及 iterable 对象。
- 多线程/多进程支持:可以在多线程或多进程中使用。
- 可配置:可以配置进度条的颜色、格式、更新频率等。
自定义进度条格式
1 | |
多进程支持
1 | |