原地文件处理
项目描述
in_place 模块提供了一个 InPlace 类,用于以“原地”方式读取和写入文件:您写入的数据最终会出现在您读取的相同文件路径中,而 in_place 会为您处理所有必要的临时文件操作。
例如,给定文件 somefile.txt
'Twas brillig, and the slithy toves Did gyre and gimble in the wabe; All mimsy were the borogoves, And the mome raths outgrabe.
和程序 disemvowel.py
import in_place
with in_place.InPlace("somefile.txt") as fp:
for line in fp:
fp.write("".join(c for c in line if c not in "AEIOUaeiou"))
程序运行后,somefile.txt 将被原地编辑,缩减为仅剩
'Tws brllg, nd th slthy tvs Dd gyr nd gmbl n th wb; ll mmsy wr th brgvs, nd th mm rths tgrb.
那些讨厌的元音字母的痕迹!如果您想保留那些讨厌的元音字母的痕迹,您可以用以下方式构造文件句柄来保存文件的原始内容,例如,保存到 somefile.txt~
in_place.InPlace("somefile.txt", backup_ext="~")
或者使用以下方式保存到 someotherfile.txt
in_place.InPlace("somefile.txt", backup="someotherfile.txt")
与Python标准库中fileinput模块实现的就地过滤相比,in_place 提供以下优点
不是通过劫持 sys.stdout,而是返回一个新的文件句柄进行写入。
文件句柄支持所有标准I/O方法,而不仅仅是 readline()。
提供了设置文件打开时的编码、编码错误处理和换行策略的选项,同时支持以二进制模式打开文件,这些选项适用于输入和输出。
可以指定备份文件的完整文件名,而不仅仅是添加一个扩展名。
当作为上下文管理器使用时,如果发生异常,in_place 将恢复原始文件。
创建临时文件不会静默地覆盖无辜的旁观者文件。
安装
in_place 需要 Python 3.8 或更高版本。只需使用 pip 为 Python 3 安装它(您有 pip 吗?)
python3 -m pip install in_place
基本用法
in_place 提供了一个类,即 InPlace。它的构造函数接受以下参数
- name=<PATH>(必需)
要打开和原地编辑的文件路径
- mode=<"b"|"t"|None>
是否以二进制或文本模式操作文件。如果 mode 是 "b",则文件将以二进制模式打开,数据将以 bytes 对象读取和写入。如果 mode 是 "t" 或 None(默认),则文件将以文本模式打开,数据将以 str 对象读取和写入。
- backup=<PATH>
如果设置,当实例关闭时,原始文件内容将保存到指定的路径。backup 不能设置为空字符串。
- backup_ext=<EXTENSION>
如果设置,备份文件的路径将通过将 backup_ext 添加到原始文件路径来创建。
backup 和 backup_ext 是互斥的。backup_ext 不能设置为空字符串。
- **kwargs
任何额外的关键字参数(如 encoding、errors 和 newline)将在打开输入和输出文件流时传递给 open()。
name、backup 和 backup_ext 可以是 str、文件系统编码的 bytes 或路径对象。
InPlace 实例充当读写文件句柄,具有通常的文件句柄属性,具体如下
__iter__() __next__() closed flush() name read() read1() * readinto() * readinto1() * readline() readlines() write() writelines() * binary mode only
InPlace 实例还具有以下新或修改后的属性
- close()
关闭文件句柄并将文件移动到最终位置。如果文件句柄已经关闭后调用 close(),则 close() 不执行任何操作。
使用完毕后,请务必通过调用close()或rollback()显式或隐式(例如,通过作为上下文管理器使用)关闭您的实例。
- rollback()
与close()类似,但丢弃输出数据(保留原始文件不变)而不是用输出数据替换原始文件
- __enter__(),__exit__()
当InPlace实例用作上下文管理器时,在退出上下文时,实例将被关闭(如果一切顺利)或回滚(如果发生异常)。InPlace上下文管理器是不可重用的,但可重入的(只要在内部最内层上下文结束后不执行任何其他操作)。
- 输入
实际读取数据的文件句柄,如果您需要直接访问它
- 输出
实际写入数据的文件句柄,如果您需要直接访问它
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。