Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования PythonΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 27

Автор Π ΠΎΠΌΠ°Π½ Π‘ΡƒΠ·ΠΈ

>>> import string

>>> s = "one,two,three"

>>> print string.split(s, ",")

['one', 'two', 'three']

>>> print s.split(",")

['one', 'two', 'three']

Π’ вСрсии Python 3.0 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ доступны Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π±ΠΎΠ»Π΅Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ string.

Π’ Python 2.4 появилась Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° использованию ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ форматирования: класс Template. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

>>> import string

>>> tpl = string.Template("$a + $b = ${c}")

>>> a = 2

>>> b = 3

>>> c = a + b

>>> print tpl.substitute(vars())

2 + 3 = 5

>>> del c # удаляСтся имя c

>>> print tpl.safe_substitute(vars())

2 + 3 = $c

>>> print tpl.substitute(vars(), c=a+b)

2 + 3 = 5

>>> print tpl.substitute(vars())

Traceback (most recent call last):

 File "/home/rnd/tmp/Python–2.4b2/Lib/string.py", line 172, in substitute

  return self.pattern.sub(convert, self.template)

 File "/home/rnd/tmp/Python–2.4b2/Lib/string.py", line 162, in convert

  val = mapping[named]

KeyError: 'c'

ΠžΠ±ΡŠΠ΅ΠΊΡ‚β€“ΡˆΠ°Π±Π»ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° основных ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: substitute() ΠΈ safe_substitute(). ЗначСния для подстановки Π² шаблон бСрутся ΠΈΠ· словаря (vars() содСрТит ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ со значСниями ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…) ΠΈΠ»ΠΈ ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… фактичСских ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Если Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π² Π·Π°Π΄Π°Π½ΠΈΠΈ ΠΊΠ»ΡŽΡ‡Π°, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки ΠΏΡ€ΠΈ написании ΠΊΠ»ΡŽΡ‡Π° Π² шаблонС.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ строк

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²β€“ΡΡ‚Ρ€ΠΎΠΊ ΠΈ unicodeβ€“ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠœΠ΅Ρ‚ΠΎΠ΄ ОписаниС center(w) Π¦Π΅Π½Ρ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ строку Π² ΠΏΠΎΠ»Π΅ Π΄Π»ΠΈΠ½Ρ‹ w count(sub) Число Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ строки sub Π² строкС encode([enc[, errors]]) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ enc. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ errors ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния Β«strictΒ» (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), Β«ignoreΒ», Β«replaceΒ» ΠΈΠ»ΠΈ Β«xmlcharrefreplaceΒ» endswith(suffix) ΠžΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ΡΡ Π»ΠΈ строка Π½Π° suffix expandtabs([tabsize]) ЗамСняСт символы табуляции Π½Π° ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ tabsize=8 find(sub [,start [,end]]) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ наимСньший индСкс, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ начинаСтся Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ подстроки sub Π² строку. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ start ΠΈ end ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ поиск ΠΎΠΊΠ½ΠΎΠΌ start:end, Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ индСкс соотвСтствуСт исходной строкС. Если подстрока Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°, возвращаСтся –1 index(sub[, start[, end]]) Аналогично find(), Π½ΠΎ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ValueError Π² случаС Π½Π΅ΡƒΠ΄Π°Ρ‡ΠΈ alnum() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True, Ссли строка содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΡƒΠΊΠ²Ρ‹ ΠΈ Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ. Π˜Π½Π°Ρ‡Π΅ β€” False isalpha() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True, Ссли строка содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΡƒΠΊΠ²Ρ‹ ΠΈ Π΄Π»ΠΈΠ½Π° нСнулСвая isdecimal() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True, Ссли строка содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ дСсятичныС Π·Π½Π°ΠΊΠΈ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для строк Unicode) ΠΈ Π΄Π»ΠΈΠ½Π° нСнулСвая isdigit() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True, Ссли содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΈ Π΄Π»ΠΈΠ½Π° нСнулСвая islower() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True, Ссли всС Π±ΡƒΠΊΠ²Ρ‹ строчныС (ΠΈ ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ), ΠΈΠ½Π°Ρ‡Π΅ β€” False isnumeric() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True, Ссли Π² строкС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числовыС Π·Π½Π°ΠΊΠΈ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Unicode) isspace() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True, Ссли строка состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Ρ… символов. Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Для пустой строки возвращаСтся False join(seq) Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ строк ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ seq Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ строкой lower() ΠŸΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ строку ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ рСгистру Π±ΡƒΠΊΠ² lstrip() УдаляСт ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Π΅ символы слСва replace(old, new[, n]) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ копию строки, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ подстроки old Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ new. Если Π·Π°Π΄Π°Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ n, Ρ‚ΠΎ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ n Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ rstrip() УдаляСт ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Π΅ символы справа split([sep[, n]]) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список подстрок, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ΠΌ строки a Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ sep. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ n опрСдСляСт максимальноС количСство Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠΉ (слСва) startswith(prefix) НачинаСтся Π»ΠΈ строка с подстроки prefix strip() УдаляСт ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Π΅ символы Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ строки translate(table) ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ table, содСрТащСй ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΊΠΎΠ΄ΠΎΠ² Π² ΠΊΠΎΠ΄Ρ‹ (ΠΈΠ»ΠΈ Π² None, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ символ). Для Unicode–строк translate(table[, dc]) Π’ΠΎ ΠΆΠ΅, Π½ΠΎ для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… строк. ВмСсто словаря β€” строка ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π° 256 символов, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ string.maketrans(). ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ dc Π·Π°Π΄Π°Π΅Ρ‚ строку с символами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ upper() ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ Π±ΡƒΠΊΠ²Ρ‹ строки Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ split() ΠΈ join() для разбиСния строки Π² список (ΠΏΠΎ раздСлитСлям) ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ объСдинСниС списка строк Π² строку

>>> s = "This is an example."

>>> lst = s.split(" ")

>>> print lst

['This', 'is', 'an', 'example.']

>>> s2 = "\n".join(lst)

>>> print s2

This

is

an

example.

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ, оканчиваСтся Π»ΠΈ строка Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ сочСтаниС Π±ΡƒΠΊΠ², ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ endswith():

>>> filenames = ["file.txt", "image.jpg", "str.txt"

>>> for fn in filenames:

...  if fn.lower().endswith(".txt"):

...   print fn

...

file.txt

str.txt

Поиск Π² строкС ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° find(). Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ def:

import string

text = open(string.__file__[:-1]).read()

start = 0

while 1:

 found = text.find("def ", start)

if found == -1:

 break

print text[found:found + 60].split("(")[0]

start = found + 1

Π’Π°ΠΆΠ½Ρ‹ΠΌ для прСобразования тСкстовой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ являСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ replace(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рассматриваСтся Π½ΠΈΠΆΠ΅:

>>> a = "Π­Ρ‚ΠΎ тСкст , Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ запятыС , поставлСнныС Π½Π΅ Ρ‚Π°ΠΊ."

>>> b = a.replace(" ,", ",")

>>> print b

Π­Ρ‚ΠΎ тСкст, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ запятыС, поставлСнныС Π½Π΅ Ρ‚Π°ΠΊ.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ эффСктивности

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌΠΈ строками ΠΈΠ»ΠΈ большим количСством строк, примСняСмыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ по–разному Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° быстродСйствиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

НапримСр, Π½Π΅ рСкомСндуСтся ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ для склСивания большого количСства строк Π² ΠΎΠ΄Π½Ρƒ. Π›ΡƒΡ‡ΡˆΠ΅ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Ρ‚ΡŒ строки Π² спискС, Π° Π·Π°Ρ‚Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ join() ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½Ρƒ строку:

>>> a = ""

>>> for i in xrange(1000):

...  a += str(i) # нСэффСктивно!

...

>>> a = "".join([str(i) for i in xrange(1000)]) # Π±ΠΎΠ»Π΅Π΅ эффСктивно

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ссли строка Π·Π°Ρ‚Π΅ΠΌ обрабатываСтся, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят свСсти использованиС памяти ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ StringIO

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со строкой ΠΊΠ°ΠΊ с Ρ„Π°ΠΉΠ»ΠΎΠΌ. ΠœΠΎΠ΄ΡƒΠ»ΡŒ StringIO ΠΊΠ°ΠΊ Ρ€Π°Π· Π΄Π°Π΅Ρ‚ Ρ‚Π°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ.

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Β«Ρ„Π°ΠΉΠ»Π°Β» производится Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ StringIO(). ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° β€” создаСтся Π½ΠΎΠ²Ρ‹ΠΉ Β«Ρ„Π°ΠΉΠ»Β», ΠΏΡ€ΠΈ Π·Π°Π΄Π°Π½ΠΈΠΈ строки Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° β€” Β«Ρ„Π°ΠΉΠ»Β» открываСтся для чтСния:

import StringIO

my_string = Β«1234567890Β»

f1 = StringIO.StringIO()

f2 = StringIO.StringIO(my_string)

Π”Π°Π»Π΅Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ f1 ΠΈ f2 ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

Для получСния содСрТимого Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² Π²ΠΈΠ΄Π΅ строки примСняСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ getvalue():

f1.getvalue()

ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ (прСдставлСниС Ρ„Π°ΠΉΠ»Π° Π½Π° дискС Π² Π²ΠΈΠ΄Π΅ строки) ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… Unix ΠΈ Windows с использованиСм модуля mmap. Π—Π΄Π΅ΡΡŒ этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ difflib

Для ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сравнСния Π΄Π²ΡƒΡ… строк Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ прСдусмотрСн ΠΌΠΎΠ΄ΡƒΠ»ΡŒ difflib.

Ѐункция difflib.get_close_matches() позволяСт Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ n Π±Π»ΠΈΠ·ΠΊΠΈΡ… строк ΠΊ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ строкС:

get_close_matches(word, possibilities, n=3, cutoff=0.6)

Π³Π΄Π΅

word

Π‘Ρ‚Ρ€ΠΎΠΊΠ°, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ищутся Π±Π»ΠΈΠ·ΠΊΠΈΠ΅ строки.

possibilities

Бписок Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ².

n

Π’Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ количСство Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΡ… строк.

cutoff

ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ (ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° [0, 1]) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ уровня совпадСния строк. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈ сравнСнии с word Π΄Π°ΡŽΡ‚ мСньшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.