strutils
-文本操作¶
如此多的实际编程都涉及字符串操作,而这正是Python所能适应的。尽管如此,标准库中仍然缺少数十个基本和常见的功能,其中几个功能是由 strutils
。
- class boltons.strutils.MultiReplace(sub_map, **kwargs)[源代码]¶
多重替换是一次执行多个查找/替换操作的工具。
在给定要替换的值的映射的情况下,它允许在单个过程中替换所有匹配值,这可以在非常大的字符串上节省大量性能。除了简单的替换,它还允许基于正则表达式进行替换。
关键字参数:
词典用法::
from lrmslib import stringutils s = stringutils.MultiReplace({ 'foo': 'zoo', 'cat': 'hat', 'bat': 'kraken' }) new = s.sub('The foo bar cat ate a bat') new == 'The zoo bar hat ate a kraken'
可重复使用::
from lrmslib import stringutils s = stringutils.MultiReplace([ ('foo', 'zoo'), ('cat', 'hat'), ('bat', 'kraken)' ]) new = s.sub('The foo bar cat ate a bat') new == 'The zoo bar hat ate a kraken'
可以向构造函数传递字典或其他映射以及可迭代的元组。如果给定了一个可迭代变量,则将按照可迭代变量中指定的替换值的顺序运行替换。如果给它一个OrderedDict,这也是正确的。如果给定词典,则顺序将是不确定的::
>>> 'foo bar baz'.replace('foo', 'baz').replace('baz', 'bar') 'bar bar bar' >>> m = MultiReplace({'foo': 'baz', 'baz': 'bar'}) >>> m.sub('foo bar baz') 'baz bar bar'
这是因为,如果您要插入的内容可能会被以后的替换所替换,则替换的顺序可能很重要。请注意,如果您需要依赖顺序,那么可以考虑使用元组列表而不是字典。
- boltons.strutils.a10n(string)[源代码]¶
那个“国际化”变成“I18N”的东西叫什么来着?缩写?哦,等等,不:
a10n
。(它实际上是一种 numeronym 。)>>> a10n('abbreviation') 'a10n' >>> a10n('internationalization') 'i18n' >>> a10n('') ''
- boltons.strutils.args2cmd(args, sep=' ')[源代码]¶
返回Shell转义的字符串版本 args ,由 sep ,使用与Microsoft C运行时相同的规则。
>>> print(args2cmd(['aa', '[bb]', "cc'cc", 'dd"dd'])) aa [bb] cc'cc dd\"dd
正如您所看到的,转义是通过反斜杠而不是引号进行的,并且双引号是唯一的特殊字符。有关更多详细信息,请参阅代码中的注释。基于来自
subprocess
模块。
- boltons.strutils.args2sh(args, sep=' ')[源代码]¶
返回Shell转义的字符串版本 args ,由 sep ,基于Linux/BSD/MacOS生态系统中的sh、bash和其他Shell的规则。
>>> print(args2sh(['aa', '[bb]', "cc'cc", 'dd"dd'])) aa '[bb]' 'cc'"'"'cc' 'dd"dd'
如您所见,不带特殊字符的参数不会转义,带特殊字符的参数用单引号引起来,单引号本身用双引号引起来。双引号的处理方式与任何其他特殊字符一样。
基于来自
pipes
/shlex
模块。另请注意,shlex
和argparse
具有拆分和分析以这种方式转义的字符串的函数。
- boltons.strutils.asciify(text, ignore=False)[源代码]¶
转换Unicode或字节字符串, text 转换为只包含ASCII字符的字节串。为你们这些亲欧洲的人做基本的脱音。
另外,温和地提醒一下,这是一个 utility ,主要用于粘合。只要有可能,就让您的应用程序工作 with Unicode,不是反对它。
>>> asciify('Beyoncé') == b'Beyonce' True
- boltons.strutils.bytes2human(nbytes, ndigits=0)[源代码]¶
将一个整数值变为 nbytes 转换成人类可读的格式。集 ndigits 控制小数点后应显示的位数(默认
0
)。>>> bytes2human(128991) '126K' >>> bytes2human(100001221) '95M' >>> bytes2human(0, 2) '0.00B'
- boltons.strutils.camel2under(camel_string)[源代码]¶
将驼峰大小写字符串转换为下划线。对于将类名转换为函数名很有用。
>>> camel2under('BasicParseTest') 'basic_parse_test'
- boltons.strutils.cardinalize(unit_noun, count)[源代码]¶
单数词有条件复数形式 unit_noun 如果 count 不是一个,尽可能地保留大小写。
>>> vowels = 'aeiou' >>> print(len(vowels), cardinalize('vowel', len(vowels))) 5 vowels >>> print(3, cardinalize('Wish', 3)) 3 Wishes
- boltons.strutils.escape_shell_args(args, sep=' ', style=None)[源代码]¶
中每个字符串的转义版本 args ,根据 style 。
- 参数:
看见
args2cmd()
和args2sh()
查看每种样式的详细信息和示例输出。
- boltons.strutils.find_hashtags(string)[源代码]¶
查找并返回字符串中的所有哈希标签,但删除了哈希标记。支持亚洲语言的全角哈希标记,并且在URL锚点上不会出现误报。
>>> find_hashtags('#atag http://asite/#ananchor') ['atag']
find_hashtags
也可以与Unicode标签一起使用。
- boltons.strutils.format_int_list(int_list, delim=',', range_delim='-', delim_space=False)[源代码]¶
返回正整数列表中已排序的范围字符串( int_list )。整数的连续范围折叠为最小值和最大值。反转
parse_int_list()
。- 参数:
>>> format_int_list([1,3,5,6,7,8,10,11,15]) '1,3,5-8,10-11,15'
- boltons.strutils.gunzip_bytes(bytestring)[源代码]¶
这个
gzip
如果你有一个文件或类似文件的对象,模块是很棒的,但如果你只有字节又会怎样呢?StringIO是一种可能性,但只使用这一行代码通常更快、更容易、更简单。使用这个久经考验的实用函数从字节中解压缩gzip。>>> gunzip_bytes(_EMPTY_GZIP_BYTES) == b'' True >>> gunzip_bytes(_NON_EMPTY_GZIP_BYTES).rstrip() == b'bytesahoy!' True
- boltons.strutils.gzip_bytes(bytestring, level=6)[源代码]¶
将一些字节转换为一些压缩字节。
>>> len(gzip_bytes(b'a' * 10000)) 46
请注意,现在所有级别的gzip都相当快,尽管它在任何级别的压缩方面都不是真正的竞争对手。
- boltons.strutils.html2text(html)[源代码]¶
从HTML文本中剥离标签,返回无标记文本。此外,还会尽最大努力替换“ ;”等实体
>>> r = html2text(u'<a href="#">Test &<em>(Δημώ)</em></a>') >>> r == u'Test &(Δημώ)' True
- boltons.strutils.indent(text, margin, newline='\n', key=<class 'bool'>)[源代码]¶
缺少内置的对应部件
textwrap.dedent()
。
- boltons.strutils.is_ascii(text)[源代码]¶
检查Unicode或字节串, text ,仅由ASCII字符组成。加薪
ValueError
如果参数不是文本。- 参数:
text (str or unicode) -- 要检查的字符串。
>>> is_ascii('Beyoncé') False >>> is_ascii('Beyonce') True
- boltons.strutils.is_uuid(obj, version=4)[源代码]¶
检查参数是否为有效的UUID对象或字符串。
>>> is_uuid('e682ccca-5a4c-4ef2-9711-73f9ad1e15ea') True >>> is_uuid('0221f0d9-d4b9-11e5-a478-10ddb1c2feb9') False >>> is_uuid('0221f0d9-d4b9-11e5-a478-10ddb1c2feb9', version=1) True
- boltons.strutils.iter_splitlines(text)[源代码]¶
喜欢
str.splitlines()
,但返回行的迭代器而不是列表。也类似于file.next()
,因为这也会懒惰地从文件中读取和生成行。此函数适用于各种行尾,但与往常一样,在文件中混用行尾时要小心。
>>> list(iter_splitlines('\nhi\nbye\n')) ['', 'hi', 'bye', ''] >>> list(iter_splitlines('\r\nhi\rbye\r\n')) ['', 'hi', 'bye', ''] >>> list(iter_splitlines('')) []
- boltons.strutils.ordinalize(number, ext_only=False)[源代码]¶
转弯 number 转换为其基本形式,即第一、第二、第三、第四等。如果最后一个字符不是数字,则返回不变的字符串值。
>>> print(ordinalize(1)) 1st >>> print(ordinalize(3694839230)) 3694839230th >>> print(ordinalize('hi')) hi >>> print(ordinalize(1515)) 1515th
- boltons.strutils.parse_int_list(range_string, delim=',', range_delim='-')[源代码]¶
参数返回正整数的排序列表。 range_string 。反转
format_int_list()
。- 参数:
range_string (str) -- 逗号分隔的正整数或范围的字符串(例如‘1,2,4-6,8’)。打印机对话框中使用的自定义页面范围字符串的典型特征。
delim (char) -- 默认为‘,’。分隔整数和连续的整数范围。
range_delim (char) -- 默认为‘-’。指示整数的连续范围。
>>> parse_int_list('1,3,5-8,10-11,15') [1, 3, 5, 6, 7, 8, 10, 11, 15]
- boltons.strutils.pluralize(word)[源代码]¶
半智能地将一名英国人 word 从单数形式到复数形式,保留大小写模式。
>>> pluralize('friend') 'friends' >>> pluralize('enemy') 'enemies' >>> pluralize('Sheep') 'Sheep'
- boltons.strutils.singularize(word)[源代码]¶
半智能地转换英语复数 word 到它的单数形式,保留大小写模式。
>>> singularize('chances') 'chance' >>> singularize('Activities') 'Activity' >>> singularize('Glasses') 'Glass' >>> singularize('FEET') 'FOOT'
- boltons.strutils.slugify(text, delim='_', lower=True, ascii=False)[源代码]¶
一个基本函数,用于将充满可怕字符(即标点符号和空格)的文本转换为相对安全的小写字符串,仅由指定的分隔符分隔 delim ,它缺省为
_
。这个 ascii 便利旗帜将
asciify()
如果您需要仅限ASCII的弹头,则可以选择弹头。>>> slugify('First post! Hi!!!!~1 ') 'first_post_hi_1'
>>> slugify("Kurt Gödel's pretty cool.", ascii=True) == b'kurt_goedel_s_pretty_cool' True
- boltons.strutils.split_punct_ws(text)[源代码]¶
而当
str.split()
将在空格上拆分,split_punct_ws()
将在标点符号和空格上拆分。这是由内部使用的slugify()
上图。>>> split_punct_ws('First post! Hi!!!!~1 ') ['First', 'post', 'Hi', '1']
- boltons.strutils.strip_ansi(text)[源代码]¶
将ANSI转义代码从 text 。在日志或重定向输出意外捕获控制台颜色代码等情况下非常有用。
>>> strip_ansi('[0m[1;36mart[46;34m') 'art'
支持Unicode、字符串、字节和字节数组内容作为输入。返回与输入相同的类型。
有许多ANSI ART可用于测试 sixteencolors.net 。此函数不解释或呈现ANSI图片,但您可以使用 ansi2img 或 escapes.js 。
- boltons.strutils.under2camel(under_string)[源代码]¶
将带下划线的字符串转换为驼色大小写。用于将函数名转换为类名。
>>> under2camel('complex_tokenizer') 'ComplexTokenizer'
- boltons.strutils.unit_len(sized_iterable, unit_noun='item')[源代码]¶
返回迭代数的纯英语描述
len()
,有条件地用复数cardinalize()
,详情如下。>>> print(unit_len(range(10), 'number')) 10 numbers >>> print(unit_len('aeiou', 'vowel')) 5 vowels >>> print(unit_len([], 'worry')) No worries
- boltons.strutils.unwrap_text(text, ending='\n\n')[源代码]¶
文本解开,这是对
textwrap.wrap()
。>>> text = "Short \n lines \nwrapped\nsmall.\n\nAnother\nparagraph." >>> unwrap_text(text) 'Short lines wrapped small.\n\nAnother paragraph.'
- 参数:
text -- 要解开的字符串。
ending (str) -- 要连接所有未换行段落的字符串。经过
None
才能拿到名单。为与Markdown和RST兼容,默认设置为‘nn’。