Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Преобразование строк в Python

Илья Ушаков
Илья Ушаков
Технический писатель
05 мая 2023 г.
1110
10 минут чтения
Средний рейтинг статьи: 5

Python является одним из самых популярных и востребованных языков программирования. Он имеет большое количество встроенных методов и функций, в том числе и для работы со строками. Часть из них будет использована в данной инструкции, но об этом немного позже. 

Строки – это объекты данных, которые хранят последовательность символов, в том числе буквы, цифры, знаки препинания и т.д. Преобразование строк необходимо в тех случаях, когда пользователь не имеет возможности проделать ряд операции над ними, ввиду их особенности. Например, он не может сложить две строки, хранящие числа и получить их сумму. Для этого необходимо в первую очередь выполнить преобразование, а уже потом реализовывать их сложение. Такой принцип работает и для всех остальных типов данных.

В данной инструкции мы расскажем о том, как выполнять преобразование строк в другие типы данных.

Преобразование строк

Преобразование строк – это процесс перехода от строкового типа данных к другому, реализованный с помощью встроенных методов Python. 

Данный процесс может понадобиться пользователю в самых разных случаях. Ниже приведем список некоторых из них:

  • Информация, полученная от пользователя.

Описанный случай может возникнуть в некоторых приложениях, где пользователь, например, заполняет форму ввода. Вся информация, которая была указана в ней, будет передана по умолчанию в виде строки. Для дальнейшего взаимодействия с данным, их необходимо преобразовать к правильному типу.

  • Информация, считанная с файлов.

В данном случае пользователю так же, как и в прошлом примере, необходимо произвести преобразование полученной последовательности символов, будь это JSON или XML-файлы. 

  • Данные с БД.

При взаимодействии с БД некоторые ее данные могут также интерпретироваться в код программы как строки. Чтобы код работал правильно, их необходимо привести к соответствующему типу данных.

  • Сравнение строк.

Если пользователь хочет выполнить сравнение двух строк, они обязательно должны быть приведены к одному типу данных. А вот выбор этого типа зависит от требований к сравнению. Например, пользователь хочет выяснить, какое из чисел в сравниваемых последовательностях больше. Для этого он преобразует строки в числовой формат данных, а затем выполняет сравнение.

Исходя из примеров выше, можно утверждать, что без преобразования строк невозможно правильно выполнить требуемые операции в своем коде. С реализацией данного процесса помогут методы, встроенные в Python. Им и будет отведена оставшаяся часть этой инструкции.

Строка → Целое число

В первую очередь поговорим о преобразовании последовательности символов в числа. Первый метод, который будет рассмотрен – это int(). Он предназначен для преобразования строки в целое число в Python. Его синтаксис выглядит следующим образом:

int(example_string)

В качестве аргумента он принимает исходную последовательность символов, а затем преобразует ее к целому числу.

Рассмотрим на примере:

example_string = "112"
result = int(example_string)
print(result)

Результат работы продемонстрирован на картинке ниже.

Image10

Если аргумент функции содержит не только цифры, а например буквы или другие символы, то int() не сможет выполнить преобразование и выведет ошибку ValueError. Однако в некоторых случаях это можно обойти. Например, пользователь передал в аргумент число в шестнадцатеричной системе счисления, что подразумевает наличие букв в такой последовательности. В этом случае используется дополнительный аргумент, который указывает на основание системы счисления. Он даст понять среде разработке, что перед ней представлено именно число.

Рассмотрим данную ситуацию на примере:

example_string = "A1"
result = int(example_string, 16)
print(result)

В этом примере компилятор не выдаст никаких ошибок и выведет результат, который показан на картинке ниже.

Image4

Как мы видим, код успешно выполнен и программа преобразовала строку в десятичное целое число 161.

Строка → Вещественное число

В данной главе мы поговорим о преобразовании последовательности символов в числа с плавающей точкой. Поможет нам в этом функция float(). Ее синтаксис ничем не отличается от функции, рассматриваемой в прошлой главе. Стоит отметить, что вещественное число обязательно должно содержать точку, а не запятую. Иначе Python просто не сможет интерпретировать передаваемое в строке число. 

Приведем пример использования функции:

example_string = "112.112"
result = float(example_string)
print(result)

В данном примере мы преобразуем последовательность символов 112.112 в число с плавающей точкой. Результат представлен на картинке ниже.

Image5

В дополнение к рассмотренной выше функции стоит упомянуть о существовании round(). Она понадобится пользователю в тех случаях, когда необходимо указать требуемое количество чисел после точки. 

Допустим, нам нужно, чтобы в примере выше при преобразовании строки итоговое число содержало всего одну цифру после точки. Для этого нам необходимо объявить функцию round() и передать соответствующий аргумент:

example_string = "112.112"
result = round(float(example_string),1)
print(result)

После дополнительных преобразований результат получился следующим:

Image3

На этом о преобразовании строк в числа мы закончим и перейдем к не менее важному типу данных – списку.

Строка → Список

В данном разделе инструкции мы рассмотрим преобразование строк в списки в Python, а именно функцию split()

Списки – это перечисленные через запятую элементы, которые обязательно заключены в квадратные скобки. Все элементы списка имеют свой уникальный идентификатор (индекс). Типы данных у элементов могут различаться.

Теперь поговорим о самой функции split(). Она выполняет разделение строки на список подстрок, используя разделитель. По умолчанию он равен пробелу, но его можно изменить при необходимости. Для этого при вызове функции нужно указать уникальный разделитель, по которому будет происходить формирование списка из последовательности символов.

Рассмотрим применение данной функции на примере:

example_string = "Monkey-Lion-Tiger"
example_list = example_string.split("-")
print(example_list)

В результате мы получим список из 3 элементов, как показано на картинке ниже.

Image1

Списки используются также для преобразования строки в массив в Python. Именно в них хранятся все элементы. А происходит это из-за того, что в данном языке программирования попросту отсутствуют массивы как отдельный тип данных. 

Строка → Дата

Во время написания кода программист может столкнуться с необходимостью преобразования строки в дату. На этот случай в Python также существуют специальные модули, которые будут рассмотрены ниже.

Метод strptime

Рассматриваемый метод принадлежит модулю datetime. Он создает объект даты и времени из строки, соответствующей указанному формату. 

Синтаксис рассматриваемого метода выглядит следующим образом:

datetime.strptime (date_string, date_format)

Рассмотрим ниже пример, где у нас есть последовательность символов 2023-01-01 12:30:31, которую необходимо преобразовать в дату и время. В первую очередь инициализируем модуль, а затем уже пишем оставшийся код:

from datetime import datetime

date_string = "2023-01-01 12:30:31"
date_object = datetime.strptime(date_string, "%Y-%d-%m %H:%M:%S")
print(date_object)

В качестве формата даты и времени в примере мы указали %Y-%d-%m %H:%M:%S, но у вас он может отличаться, т.к. напрямую зависит от формата даты в исходной строке.

Как видно по картинке ниже, преобразование выполнено успешно.

Image2

Функция parser.parse

Теперь перейдем к модулю dateutil и его функции parser.parse. Действует она также, как и предыдущий метод, но есть одно отличие. Заключается оно в том, что функция parser.parse автоматические определяет формат указанной даты. 

Синтаксис вызова функции выглядит следующим образом:

parser.parse(example_string)

Теперь рассмотрим ее использование на примере, не забывая объявить модуль в начале кода:

from dateutil import parser

date_string = "2023-01-01 12:30:31"
date_object = parser.parse(date_string)
print(date_object)

В примере мы использовали уже знакомые дату и время. Результат получился таким же, как и в прошлом способе.

Image2

Строка → Функция

Функция – это некоторый фрагмент кода, который отвечает за выполнение конкретной задачи и может быть использован множество раз. У пользователя может возникнуть ситуация, когда этот фрагмент кода будет закреплен за переменной строкового типа и ее необходимо преобразовать в функцию. С этим ему поможет встроенная функция eval().

Eval() анализирует все данные, которые были переданы ей в качестве аргумента, после чего выполняет полученное выражение, если это возможно. Она отлично подходит для преобразования строки в функцию в Python.

Ее синтаксис выглядит следующим образом:

eval(выражение)

Рассмотрим использование eval() на примере:

example_string = "print('Hello, user!')"
eval(example_string)

В данном примере мы храним вызов функции print() в переменной example_string. Eval(), в свою очередь, принимает в качестве аргумента содержимое этой переменной и вызывает считанное выражение. 

Как видно по картинке ниже, вызов функции успешно выполнен.

Image9

Используйте рассмотренную функцию осторожно. Всегда нужно контролировать выражение, которое принимает eval(). Если оно было передано извне, например другими пользователями, то это может навредить вашей системе. 

Строка → Байты

Байты – это последовательность, которая, в отличие от строк, состоит из отдельных байтов. Их синтаксис примерно такой же, как и у обычной последовательности символов. Единственное отличие – это префикс b, расположенный перед началом последовательности.

С преобразованием строк в байты в Python нам поможет функция encode(). Она выполнит кодировку необходимой последовательности символов и вернет строку байтов. Все, что нужно указать при ее вызове – это имя кодировки. По умолчанию используется utf-8.

Рассмотрим использование encode() на примере:

example_string = "Hello, user!"
example_bytes = example_string.encode()
print(example_bytes)

В результате мы получили байтовую версию указанной строки в переменной example_string, как показано на картинке ниже.

Image6

Если пользователь захочет декодировать объект байтов обратно в исходный вид, то он может использовать функцию decode().

Строка → Словарь

Словарь – это некая структура данных, которая хранит пары в виде «Ключ — Значение».

В данной главе рассмотрим два способа преобразования строки в словарь в Python. 

json.loads()

Первая рассматриваемая функция json.loads() относится к модулю json. Она принимает исходную последовательность символов в формате JSON и преобразует ее в словарь.

В начале написания кода обязательно импортируем модуль json.

Пример:

import json

json_string = '{"animal": "Dog", "breed": "Labrador", "age": 9}'
result = json.loads(json_string)
print(result)

Как итог, мы получили словарь с 3 парами, продемонстрированный на картинке ниже.

Image7

ast.literal_eval()

Следующей метод, который мы рассмотрим в данной главе, – ast.literal_eval(). Он принадлежит модулю ast и выполняет ту же функцию, что и прошлый метод.

Перейдем сразу к примеру, не забывая в начале кода импортировать нужный модуль:

import ast

example_string = "{'animal': 'Dog', 'breed': 'Labrador', 'age': 9 }"
result = ast.literal_eval(example_string)
print(result)

Здесь мы использовали те же данные, что и в прошлом примере. В результате мы получили точно такой же словарь, как и при использовании метода json.loads().

Image7

Единственное отличие метода ast.literal_eval() от прошлого в том, что последовательность символов, которую он принимает, должна быть в формате словаря, а не в формате JSON.

Заключение

В данной инструкции мы рассмотрели 7 преобразований строк в другие типы данных. Кроме того, к каждому из них мы привели примеры и альтернативные способы преобразования. Надеемся, полученная из этой статьи информация поможет вам правильно взаимодействовать со строковым типом данных при написании кода.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону