在文件树中替换模式/名称的工具

UUnonymous的Python项目详细描述


无亲和力

{a1}描述

UUnonymous有助于替换文件树或压缩存档中的关键字或正则表达式模式。它递归地遍历树,打开支持的文件,并用替换项替换找到的任何模式或关键字。除了内容之外,UUnonymous还将取代文件/文件夹路径中的关键字/模式。在

结果将是原始文件树的复制或替换版本,并进行所有替换。在

目前,UUnonymous支持基于文本的文件,如.txt、.html、.json和.csv。假设为UTF-8编码。除了文本文件,UUnonymous还能够处理(嵌套)zip归档文件。这些档案将被解压到一个临时文件夹,处理和压缩再次。在

安装

$ pip install UUnonymous

使用

在代码中导入Anomymize类并创建一个匿名化对象,如下所示:

from uunonymous import Anonymize

# refer to csv files in which keywords and substitutions are paired
anonymize_csv = Anonymize('/Users/casper/Desktop/keys.csv')

# using a dictionary instead of a csv file:
my_dict = {
    'A1234': 'aaaa',
    'B9876': 'bbbb',
}
anonymize_dict = Anonymize(my_dict)

# specifying a zip-format to zip unpacked archives after processing (.zip is default)
anonymize_zip = Anonymize('/Users/casper/Desktop/keys.csv', zip_format='gztar')

当使用csv文件时,UUnonymous将假定您的文件包含两列:左列包含需要替换的关键字,右列包含它们的替换。^{str>,但后面的列格式是必需的。在

可以在csv文件中添加正则表达式作为关键字。确保它们以前缀“r”开头。示例:

^{pr2}$

密钥将被编译为正则表达式,并将每个匹配项替换为“replacement_string”。在

当只使用字典时(缺少pattern参数),键将被它们的值替换。同样,可以使用(编译的)正则表达式作为键。表达式将用其值替换所有匹配项。示例:

anon = Anonymize(
    {
        'regular-key': 'replacement-1',
        re.compile('ca.*?er'): 'replacement-2'
    }
)

当关键字可以泛化为单个正则表达式时,性能可能会得到提高。UUnynomize将搜索并替换这些模式,而不是根据文件内容或文件/文件夹路径匹配整个dictionary/csv文件。示例:

anonymize_regex = Anonymize(my_dict, pattern=r'[A-B]\d{4}')

默认情况下区分大小写。可以使用flag参数修改处理替换的正则表达式。它接受一个或多个变量which can be found here。多个变量由位OR(运算符|)组合而成。不区分大小写的替换示例:

anonymize_regex = Anonymize(my_dict, flags=re.IGNORECASE)

通过使用use_word_boundaries参数(默认为False),算法忽略子字符串匹配。如果“ted”是字典中的键,而没有use_word_boundaries,则算法将替换f.i.“created\u at”中的“ted”部分。您可以通过将use_word_boundaries设置为True来解决此问题。它将把\b-anchor放在regex模式或字典键周围。边界锚的优点在于“@”也被视为一个边界,因此电子邮件地址中的名称可以被替换。示例:

anonymize_regex = Anonymize(my_dict, use_word_boundaries=True)

Windows使用

创建zip存档时出现问题。确保以管理员身份运行uUnymous。在

就地替换与副本中的替换

UUnonymous能够创建已处理文件树的副本或替换它。substitute方法接受一个强制的源路径参数(文件、文件夹或zip存档文件的路径,可以是字符串或Path对象)和可选的目标路径参数(同样是字符串或Path对象)。目标需要引用一个文件夹,该文件夹不能是源文件夹的子文件夹。如果目标文件夹不存在,将创建它。在

当提供target参数时,UUnonymous将在目标文件夹中创建一个经过处理的源副本。如果源是单个文件,并且文件路径不包含将被替换的元素,并且目标文件夹与源文件夹相同,则处理后的结果将获得一个“copy”扩展名以防止覆盖。在

当省略目标参数时,源将被它的处理版本覆盖:

# process the datadownload.zip file, replace all patterns and write
# a copy to the 'bucket' folder.
anonymize_regex.substitute(
    '/Users/casper/Desktop/datadownload.zip', 
    '/Users/casper/Desktop/bucket'
)

# process the 'download' folder and replace the original by its processed 
# version
anonymize_regex.substitute('/Users/casper/Desktop/download')

# process a single file, and replace it
anonymize_regex.substitute('/Users/casper/Desktop/my_file.json')

托多

在修复源文件夹与目标文件夹共享同一父文件夹时发生的无限循环

测试;)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java读取SSLSocket的最快或最佳方式   JavaGuice向类构造函数注入对象   java类不是抽象的,并且不会覆盖OnClickListener中的抽象方法onClick(视图)   java OpenGL 1.1更改颜色更改以前的颜色?   c#将Java/Android连接到。网络服务   java在节点上生成AES密钥   java Liferay与MarkLogic XDBC数据库集成   java使用静态初始化块来提高性能   java如何在需要不同参数的另一个方法中使用同一类中的方法   音频Java多种声音   Java显式引用转换   java Intellij,如何在maven项目中导入模块   java在什么条件下调用ELResolver的setValue方法?   java在beanshell中计算代码字符串并获取beanshell解释器返回的值   javascript将音频文件上载到服务器并从服务器响应设置图像   编码风格清理java代码,多个else if语句   java是否需要使此变量可变?   java线程未更新GlassPane上的进度条   java关闭调试模式@Vaadin Spring启动应用程序