Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Описатели формата. Другие общие методы строк. Разрезание строк




Описатели формата

Постойте! Есть еще кое-что. Давайте взглянем на еще одну странную строку из humansize. py:

if size < multiple:
return '{0:. 1f} {1}'. format(size, suffix)

{1} заменяется на второй аргумент метода format(), то есть на значение переменной suffix. Но что означает {0:. 1f}? Здесь две вещи: {0}, которой Вы уже знаете и:. 1f, о которой Вы еще не слышали. Вторая половина (двоеточие и все что после него) описывает формат, который уточняет каким образом замещающее значение должно быть отформатировано.

☞ Описатель формата позволяет Вам модифицировать замещающий текст многими полезными способами, как функция printf() в языке программирования C. Вы можете добавить заполнение нулями или пробелами, горизонтальное выравнивание текста, контролировать десятичную точность и даже конвертировать числа в 16-ричную систему.

Внутри замещаемого поля символ двоеточие (: ) и все что идет после него означает описатель формата. Описатель формата ". 1" означает " округлить до десятых" (то есть показывать только один знак после запятой). Описатель формата " f" означает " число с фиксированной запятой" ( f ixed-point number) (в отличие от экспоненциального или какого-либо другого представления десятичных чисел). Таким образом если переменная size имеет значение 698. 24 а suffix - 'GB', форматированная строка получится '698. 2 GB', потому что число 698. 24 округлено до одного знака после запятой, и к нему добавлен суффикс.

> > > '{0:. 1f} {1}'. format(698. 24, 'GB')
'698. 2 GB'

За всеми деталями описателей формата обратитесь в раздел " Format Specification Mini-Language" официальной документации Python 3.

Другие общие методы строк

Помимо форматирования строки позволяют делать множество полезных трюков.

> > > s = '''Finished files are the re- ①
... sult of years of scientif-
... ic study combined with the
... experience of years. '''
> > > s. splitlines() ②
['Finished files are the re-',
'sult of years of scientif-',
'ic study combined with the',
'experience of years. ']
> > > print(s. lower()) ③
finished files are the re-
sult of years of scientif-
ic study combined with the
experience of years.
> > > s. lower(). count('f') ④
6

  • ① В интерактивной оболочке Python Вы можете вводить многострочный текст. Такой текст начинается с тройного символа кавычек. А когда Вы нажмете ENTER интерактивная оболочка предложит Вам продолжить вводить текст. Заканчиваться многострочный текст должен также тройным символом кавычек. Когда Вы нажмете ENTER интерактивная оболочка Python выполнит команду (запишет текст в переменную s).
  • ② Метод splitlines() берет многострочный текст и возвращает список строк, по одной на каждую строку оригинального текста. Заметьте, что символы перевода строки не добавляются в результирующие строки.
  • ③ Метод lower() переводит все символы строки в нижний регистр. (Аналогично метод upper() переводит строку в верхний регистр. )
  • ④ Метод count() подсчитывает количество появлений подстроки. Да, в этом предложении 6 букв " f".

Вот еще один часто встречающийся случай. Пусть у Вас есть список пар ключ-значение в виде key1=value1& key2=value2, и Вы хотите разделить их и получить словарь в виде {key1: value1, key2: value2}.

> > > query = 'user=pilgrim& database=master& password=PapayaWhip'
> > > a_list = query. split('& ') ①
> > > a_list
['user=pilgrim', 'database=master', 'password=PapayaWhip']
> > > a_list_of_lists = [v. split('=', 1) for v in a_list] ②
> > > a_list_of_lists
[['user', 'pilgrim'], ['database', 'master'], ['password', 'PapayaWhip']]
> > > a_dict = dict(a_list_of_lists) ③
> > > a_dict
{'password': 'PapayaWhip', 'user': 'pilgrim', 'database': 'master'}

  • ① Метод split() принимает один аргумент, разделитель, и разбивает строку по разделителям на список строк. В данном случае разделителем выступает аперсанд (& ), но разделитель может быть каким угодно.
  • ② Теперь у Вас есть список строк, каждая из которых состоит из ключа, знака = и значения. Мы можем использовать генераторы списков чтобы пройтись по всему списку и разбить каждую строку в месте первого знака = на две строки: ключ и значение. (Теоретически значение также может содержать знак равенства. Если просто сделаем 'key=value=foo'. split('=')), то получим список из трех элементов ['key', 'value', 'foo']. )
  • ③ Наконец Python может превратить этот список в словарь используя функцию dict().

☞ Предыдущий пример похож на грамматический разбор параметров в URL, в реальной жизни такой разбор намного сложнее. Если Вам необходимо работать с параметрами URL, то лучше использовать функцию urllib. parse. parse_qs(), которая умеет обрабатывать некоторые неочевидные специфические случаи.

Разрезание строк

Как только Вы создали строку, Вы можете получить любую её часть как новую строку. Это называется разрезание строк. Разрезание работает также как срезы для списков, что вполне логично, так как строки это те же последовательности символов.

> > > a_string = 'My alphabet starts where your alphabet ends. '
> > > a_string[3: 11] ①
'alphabet'
> > > a_string[3: -3] ②
'alphabet starts where your alphabet en'
> > > a_string[0: 2] ③
'My'
> > > a_string[: 18] ④
'My alphabet starts'
> > > a_string[18: ] ⑤
' where your alphabet ends. '

  • ① Вы можете получить любую часть строки, так называемый " срез", указав два индекса. Возвращаемое значение представляет из себя новую строку, содержащую все символы оригинальной строки в том же порядке, начиная с первого указанного индекса.
  • ② Как и при работе со срезами списков, индексы для срезов строк могут быть отрицательными.
  • ③ Индексация символов в строке начинается с нуля, поэтому a_string[0: 2] вернет первые два элемента строки, начиная с a_string[0] (включительно) и заканчивая (не включительно) a_string[2].
  • ④ Если срез начинается с индекса 0, то этот индекс можно опустить. Таким образом a_string[: 18] - это тоже самое, что и a_string[0: 18].
  • ⑤ Аналогично, если последний индекс - это длина строки, то его можно не ставить. То есть a_string[18: ] означает тоже самое, что и a_string[18: 44], так как в строке 44 символа. Здесь наблюдается приятная симметрия. В нашем примере строка содержит 44 символа, a_string[: 18] возвращает первые 18 символов, а a_string[18: ] возвращает все кроме первых 18 символов. Фактически a_string[: n] всегда возвращает первые n символов, а a_string[n: ] возвращает оставшуюся часть, независимо от длины строки.
Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...