Саммерфилд - Программирование на Python 3 (1077331), страница 20
Текст из файла (страница 20)
Метод втг,1втг(р() выполняет удаление только в начале строки, а метод в1 г, гвты р( ) — только в конце Возвращает копию строки в, в которой все символы верхнего регистра преобразованы в символы нижнего регистра, а все символы нижнего регистра — в символы верхнего регистра; смотрите также методы шг. 1оэег() и в1г. иррег() Возвращает копию строки в, в которой первые символы каждого слова преобразованы в символы верхнего регистра, а все остальные символы — в символы нижнего регистра; смотрите также метод в1г, тв1т11е() Парный метод для втг, аахетгапв(); подробности приводятся в тексте Возвращает копию строки в, в которой все символы приведе- ны к верхнему регистру; смотрите также метод в1 г.
1сэе г( ) Возвращает копию строки в, которая, если ее длина меньше величины ю дополняется слева нулями до длины и 96 Глава 2. Типы данных Метод вгг.)о!и() может также использоваться в комбинации со встроенной функцией генегвеб(), которая переворачивает строку — например, "",) о! п(генегвеб(в) ), хотя тот же результат может быть получен более кратким оператором извлечения разреженного среза — например, в(::-1). Оператор * обеспечивает возможность дублирования строки: »>в="="*5 »> рг1пг(в) »> в.= 10 »> рг1пг(в) Как показано в примере, мы можем также использовать комбинированный оператор присваивания с дублированием.' Когда оператор проверки на вхождение >п применяется к строкам, он возвращает Тгие, если операнд слева является подстрокой операнда справа или равен ему.
Когда необходимо точно определить позицию подстроки в строке„можно использовать два метода. Первый метод вгг. !пбех() возвращает позицию подстроки в строке или возбуждает исключение Нз1иеЕ г го г, если подстрока не будет найдена. Второй метод в1г.1!пб() возвращает позицию подстроки в строке или -1 в случае неудачи. Оба метода принимают искомую подстроку в качестве первого аргумента и могут принимать еще пару необязательных аргументов. Второй аргумент определяет позицию начала поиска, а третий — позицию окончания поиска. Какой из двух методов использовать — это лишь вопрос вкуса, хотя, ес- ли выполняется поиск нескольких вхождений одной и той же подстро- ки, программный код, использующий метод ввг.
1пбех(), выглядит бо- лее понятным, как показано ниже: Строки также поддерживают оператор форматирования %. Этот оператор считается устаревшим н поддерживается только для облегчения перевода программ с версии Район 2 на версию Рувимов 3. Он не используется нн в одном нв тех примеров, которые приводятся в книге. бег ехггас1 !гоп гад(1а9, 1>пе): орепег = "<" т твд + ">" с1овег = "</" + гад + ">" 1гу; > = 1>пе.>пбех(орепег) згагт = ! ч 1еп(орепег) 1 = 11ПЕ.ШбЕХ(С1ОВЕГ, В1ВГ1) ге!игл 1!пе(в!вгг:1) вхсврг На1иеЕггог. ге!игр попе беГ ех(гвсг Ггое гвд(гад, 1>пе): орепег = "<" т 1а9 ч ">" с1овег = "</" + гад + ">" ! = 1гпе.(гпб(орепег) >11'=-1: жзгг = ! т 1еп(орепег) 1 = 11пе. (1пб(с!овег, вгагг) != -1: ге!игр 1>пе(вгвгг:1) ге!игл Носе 97 Строки Обе версии функции ехтгвс1 Егоа !]ад() обладают одинаковым поведе- НИЕМ.
НаПрИМЕр, ВЫЗОВ ЕХ1Гао1 (ГОа гад("ГЕб", »ВПВ1 В <ГЕб>ГОЗЕ</ГЕб> 1П!в 13") возвращает строку «гове». В версии слева, основанной на обработке исключения, программный код, выполняющий поиск„отделен от программного кода, выполняющего обработку ошибок, а в версии справа программный код обработки строки смешивается с программным кодом обработки ошибок. Все методы — 31г. сооп1(), 31г. епбзи!1п(), втг.
1тпб(), втг. гттпб(), ззг. тпбех(), втг. г!пбех() и згг, втагтви!1П() — принимают до двух необязательных аргументов: начальную и конечную позиции. Ниже приводятся два примера эквивалентностей (предполагается, что 3 — строка): в.соипт("а", б) == в(б:].соипт("а") в.соип1("а", 5, -3) == в(5,'-3].соом("а") Как видите, строковые методы, принимающие начальную и конечную позиции, действуют со срезом строки, определяемым этими позициями. Теперь взгляните на еще одну пару эквивалентных фрагментов, на этот раз поясняющих действие метода 31г, ра г131 топ( ): 1 = 3 гт!пб('/") тг т == -!: гезо1т = в, е1зе: гево11 = в(.т], з(т], в(т + 1.] гево11 = в.грагттттоп("/") Фрагменты программного кода слева и справа не совсем эквивалентны, потому что фрагмент справа создает новую переменную т.
Обратите внимание, что имеется возможность выполнять присваивание кортежей без лишних формальностей и что в обоих случаях выполняется поиск самого последнего (крайнего справа) вхождения символа /. Если предполагать, что 3 — это строка "/овг/1оса1/о(п/1! ге(ох", то оба фрагментавернутодинитотжерезультат: ('/овг/1осв1/Ьтп', '/', 'Гтге!ох'). Метод 31г. епбзи!1П() (и 31г, 31вг1зи!1П()) может использоваться с единственным строковым аргументом, например в. втвг1зи!1П("Егоа; "), или с кортежем строк.
Ниже приводится инструкция, в которой используются методы зтг. епбвиггП() и 31г. 1оиег() для вывода имени файла, если он является файлом изображения в формате ]РЕО: тг гт1впаае.1оиег().епбви!1п((".)рц", .1ред ))' рыМ(тт1епаае, "тв а 3РЕО 1ааде") Методы семейства !в*, такие как !за1рпв() и !взрасе(), возвращают Тгое, если строка, в контексте которой они вызываются, имеет по меньшей мере один символ, и все символы в строке соответствуют определенному критерию. Например: »> "917.5". тзшд«1(), "".
!вбтцтт(), "-2".твбтд11(), "203".!вбтдтт() (Еа)зе, Еа1ве, Еа1ве, тгое) 98 Глава 2. Типы данных Методы семейства !5* работают с символами Юникода, поэтому вызов Бсг. !Бб!д!1() для строк "!)((01гс1еб б!911 смо)03" и "ФОЗ" в обоих случаях вернет Тгое. По атой причине, когда метод !Бб!9!1() возвращает Тгое, нельзя утверждать, что строка может быть преобразована в целое число. Когда мы получаем строки из внешних источников (из других программ, из файлов, через сетевые соединения или в результате взаимодействия с пользователем), они могут содержать в начале или в конце нежелательные пробельные символы. Удалить пробельные символы, находящиеся в начале строки, можно с помощью метода всг.
15стр(), в конце строки — с помощью метода БСг, гвсг!Р(), а с обоих концов— с помощью метода 51 г. Бсг!Р(). Мы можем также передавать методам семейства *Бсг!р строки, в этом случае они удалят каждое вхождение каждого символа с соответствующего конца (или с обоих концов) строки. Например: »> 5 = "КС по Ра<Кспд " >» 5. 151Г!Р(), 5. ГБСГ1Р(), Б. Бсгср() ('по Рагхспд ', 'КС по Рагхспд', 'по РагКсп9') »> "<[ипьгескесеб]>'к Бсг!Р("[]()()<>") 'опЬгасКе1еб' о Мы можем также замещать подстроки в строках, нсПркмер ое„дос„! пОЛЬЗуЯ мЕтОд 51Г, гер1асе().
Этот метод принимает два РУ, БГР.1!9 строковых аргумента и возвращает копию строки, в контексте которой был вызван метод, где каждое вхождение строки в первом аргументе замещено строкой во втором аргументе. Если второй аргумент представляет собой пустую строку, это приведет к удалению всех вхождений строки в первом аргументе. Мы увидим примеры использования Бсг, гер1асе() и некоторых других строковых методов в примере саи2Итйру в разделе «Примеры» в конце этой главы. Часто бывает необходимо разбить строку на список строк. Например, у нас может иметься текстовый файл с данными, в котором одной строке соответствует одна запись, а поля внутри записи отделяются друг от друга звездочками.
Реализовать такое разбиение можно с помощью метода 51г.вр1!1(), передав ему строку, по которой выполняется разбиение, в виде первого аргумента и максимальное число разбиений в виде второго, необязательного аргумента. Если второй аргумент не указан, выполняется столько разбиений, сколько потребуется. Ниже приводится пример использования метода: »> ГЕООГб = ГЬЕО ТО15СОУ 1828-8-28*1910-!1-20" »> г!е155 = гесогб.эр!!1("*") »> Гсе105 ['Сео ТР151оу', '1828-8-28', '1910-11-20'] Строки 99 Теперь мы можем с помощью метода атг, ар11С() выделить год рождения и год смерти и определить, сколько лет прожил Лев Толстой (плюс-минус один год): »> Ьогп = (1е105[1].
вр1ст( - ) »> Ьогп ['1828', '8', '28'] »> 01ее = Гсе)се[2].ВР)!С("-") »> рг1пс("11ыео аьовс", спс(с!ее[0]) - 1пс(ьогп[0]), "уеагв") 11нее аЬош 82 уеагв Нам потребовалось использовать преобразование ! пс ( ), чтобы преобразовать годы из строк в целые числа, но в остальном в этом фрагменте нет ничего сложного. Мы могли бы получить годы непосредственно из списка т[е108 — например, уеаг Ьогп = !пС(тсе108[1].ар1сС("-")[О]). В табл.
2.7 остались неописанными два метода — асг.заме!гара() и в! г. с гапв1асе() . Метод вс г. ваке! гапа( ) используется для создания таблицы преобразований, которая отображает одни символы в другие. Этот метод принимает один, два или три аргумента, но мы рассмотрим только простейший случай использования (с двумя аргументами), когда первый аргумент представляет строку, содержащую символы для преобразования, а второй — строку с символами, в которые нужно преобразовать. Оба аргумента должны иметь одинаковую длину, Метод втг.