strutils -文本操作?

如此多的實際編程都涉及字符串操作,而這正是Python所能適應的。盡管如此,標準庫中仍然缺少數十個基本和常見的功能,其中幾個功能是由 strutils 。

class boltons.strutils.MultiReplace(sub_map, **kwargs)[源代碼]?

多重替換是一次執行多個查找/替換操作的工具。

在給定要替換的值的映射的情況下,它允許在單個過程中替換所有匹配值,這可以在非常大的字符串上節省大量性能。除了簡單的替換,它還允許基于正則表達式進行替換。

關鍵字參數:

參數:
  • regex (bool) -- 將搜索關鍵字視為正則表達式 [Default: False]

  • flags (int) -- 編譯期間要傳遞給正則表達式引擎的標志

詞典用法::

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'

這是因為,如果您要插入的內容可能會被以后的替換所替換,則替換的順序可能很重要。請注意,如果您需要依賴順序,那么可以考慮使用元組列表而不是字典。

sub(text)[源代碼]?

對輸入文本運行替換。

給定一個輸入字符串,運行構造函數中給出的所有替換。

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 模塊。另請注意, shlexargparse 具有拆分和分析以這種方式轉義的字符串的函數。

boltons.strutils.asciify(text, ignore=False)[源代碼]?

轉換Unicode或字節字符串, text 轉換為只包含ASCII字符的字節串。為你們這些親歐洲的人做基本的脫音。

另外,溫和地提醒一下,這是一個 utility ,主要用于粘合。只要有可能,就讓您的應用程序工作 with Unicode,不是反對它。

參數:
  • text (str or unicode) -- 要歸類的字符串。

  • ignore (bool) -- 將最終編碼配置為忽略剩余的未序列化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 。

參數:
  • args (list) -- 用于轉義和聯接在一起的參數列表

  • sep (str) -- 用于聯接轉義參數的分隔符。

  • style (str) -- 從逃逸到使用的風格??梢允且韵轮? cmdsh ,分別面向Windows和Linux/BSD/等。如果 styleNone ,然后根據系統平臺進行挑選。

看見 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() 。

參數:
  • int_list (list) -- 要轉換為范圍字符串的正整數列表(例如 [1,2,4,5,6,8] )。

  • delim (char) -- 默認為‘,’。分隔整數和連續的整數范圍。

  • range_delim (char) -- 默認為‘-’。指示整數的連續范圍。

  • delim_space (bool) -- 默認為 False 。如果 True ,畢竟增加了一個空格 delim 人物。

>>> 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
參數:
  • bytestring (bytes) -- 要壓縮的字節數

  • level (int) -- 一個整數,1-9,控制速度/壓縮。1表示最快,壓縮程度最低,9表示最慢,但壓縮程度最高。

請注意,現在所有級別的gzip都相當快,盡管它在任何級別的壓縮方面都不是真正的競爭對手。

boltons.strutils.html2text(html)[源代碼]?

從HTML文本中剝離標簽,返回無標記文本。此外,還會盡最大努力替換“ ”等實體

>>> r = html2text(u'<a href="#">Test &amp;<em>(Δ&#x03b7;&#956;&#x03CE;)</em></a>')
>>> r == u'Test &(Δημ?)'
True
boltons.strutils.indent(text, margin, newline='\n', key=<class 'bool'>)[源代碼]?

缺少內置的對應部件 textwrap.dedent() 。

參數:
  • text (str) -- 要縮進的文本。

  • margin (str) -- 要添加到每行前面的字符串。

  • newline (str) -- 用于重新連接各行的換行符(默認為: \n )

  • key (callable) -- 調用每一行以確定是否縮進它。默認: bool 以確??招胁粫砑涌崭?。

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對象或字符串。

參數:
  • obj (object) -- 測試目標。支持字符串和UUID對象。

  • version (int) -- 目標UUID版本,設置為0可跳過版本檢查。

>>> 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.multi_replace(text, sub_map, **kwargs)[源代碼]?

在單個調用中調用MultiReplace的快捷函數。

boltons.strutils.ordinalize(number, ext_only=False)[源代碼]?

轉彎 number 轉換為其基本形式,即第一、第二、第三、第四等。如果最后一個字符不是數字,則返回不變的字符串值。

參數:
  • number (int or str) -- 要進行基數處理的數字。

  • ext_only (bool) -- 是否僅返回后綴。默認 False 。

>>> 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('art')
'art'

支持Unicode、字符串、字節和字節數組內容作為輸入。返回與輸入相同的類型。

有許多ANSI ART可用于測試 sixteencolors.net 。此函數不解釋或呈現ANSI圖片,但您可以使用 ansi2imgescapes.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’。