跳转到主要内容

原地文件处理

项目描述

Project Status: Active - The project has reached a stable, usable state and is being actively developed. CI Status https://codecov.io/gh/jwodder/inplace/branch/master/graph/badge.svg https://img.shields.io/pypi/pyversions/in_place.svg Conda Version MIT License

GitHub | PyPI | 问题 | 变更日志

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 添加到原始文件路径来创建。

backupbackup_ext 是互斥的。backup_ext 不能设置为空字符串。

**kwargs

任何额外的关键字参数(如 encodingerrorsnewline)将在打开输入和输出文件流时传递给 open()

namebackupbackup_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上下文管理器是不可重用的,但可重入的(只要在内部最内层上下文结束后不执行任何其他操作)。

输入

实际读取数据的文件句柄,如果您需要直接访问它

输出

实际写入数据的文件句柄,如果您需要直接访问它

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

in_place-1.0.0.tar.gz (16.6 kB 查看哈希值)

上传时间

构建分布

in_place-1.0.0-py3-none-any.whl (7.9 kB 查看哈希值)

上传时间 Python 3

由以下支持