Как разделить строку на две части в Python: простой способ для новичков
Для разделения строки на две части в Python вы можете использовать метод split(). Этот метод разделяет строку на подстроки, используя указанный разделитель, и возвращает список этих подстрок.
string = "Привет, мир!" parts = string.split(", ") # Разделяем строку по запятой и пробелу print(parts)
['Привет', 'мир!']
Детальный ответ
Как разбить строку на две части в Python
В Python есть несколько способов разбить строку на две части. Рассмотрим некоторые из них.
1. Использование метода split()
Метод split() разделяет строку на подстроки с использованием указанного разделителя и возвращает их в виде списка. Если не указать разделитель, то строка будет разбита по пробелам. Пример:
string = "Привет, мир!" parts = string.split(",") print(parts)
['Привет', ' мир!']
2. Использование функции split() и распаковки
Еще одним способом является использование функции split() в сочетании с распаковкой. Пример:
string = "Hello, world!" part1, part2 = string.split(",") print(part1) print(part2)
Hello world!
3. Использование срезов (slicing)
Если известна позиция, на которой нужно разделить строку, можно использовать срезы (slicing). Пример:
string = "Bonjour, tout le monde!" split_index = 7 part1 = string[:split_index] part2 = string[split_index:] print(part1) print(part2)
Bonjour , tout le monde!
4. Использование регулярных выражений
Для более сложной логики разделения строки на две части можно использовать модуль re и регулярные выражения. Пример:
import re string = "Hola, mundo!" pattern = r"(.*),\s(.*)" match = re.match(pattern, string) if match: part1 = match.group(1) part2 = match.group(2) print(part1) print(part2)
Hola mundo!
Теперь вы знаете несколько различных способов разбить строку на две части в Python. Используйте подходящий метод в зависимости от вашей конкретной ситуации.
Методы строк в Python
Строки — это последовательности, а значит любые операции над последовательностями для них работают тоже:
print(len('Hello world')) # Выведет: 11 print('Hello world'[6:]) # Выведет: 'world' print('Hello world'.count('l')) # Выведет: 3
Все методы строк перечислены на специальной странице в документации. Здесь мы продемонстрирует работу некоторых из них.
Примеры методов строк
str.split
Возьмём строку, содержащую пробелы, перенос строки и табы:
print('Hi!\n\tMy name is Bob.')
Метод str.split позволяет разбить строку на список из нескольких строк по “пробельным” символам:
print('Hi!\n\tMy name is Bob.'.split()) # Выведет ['Hi!', 'My', 'name', 'is', 'Bob.']
Строку можно разбить и по конкретному символу. Вот так можно разбить строку на слова исключительно по пробелам:
print('Hi!\n\tMy name is Bob.'.split(' ')) # Выведет ['Hi!\n\tMy', 'name', 'is', 'Bob.']
str.join
join — антоним split , и может соединить строку, например, обратно по пробелам:
print(' '.join(['Hi!\n\tMy', 'name', 'is', 'Bob.']))
Обратите внимание на синтаксис: сначала идёт строка, по которой нужно склеить список строк, а уже в скобочках идёт список строк.
str.isdigit и str.isalpha
Среди методов строк реализовано много рутиных операций. Например, можно проверить, состоит ли строка только из цифр или только из букв:
>>> print('123'.isdigit()) True >>> print('Hello'.isdigit()) False >>> print('Hello'.isalpha()) True >>> print('Hello!'.isalpha()) False
str.rjust, str.ljust и str.center
В другой статье мы описали, как с помощью этих методов выравнивать строки по ширине.
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Как парсить строки с помощью Python?
Как с помощью Python парсить строки? Например, приходит инф с адресом «Киевская обл. , г. Киев, ул. Крещатик, дом 50, кв. 8» по факту этот адрес должен быть связан с ФИО клиента в БД. Но так как в БД залили не такой формат, то по поиску в БД не ищет ибо адрес может быть в другом порядке записан или без указания букв «кв», «дом» и тд.
- Вопрос задан более трёх лет назад
- 1316 просмотров
2 комментария
Средний 2 комментария
Уровень изложения на уровне.
Нужен пример входной строки и то, что нужно получить на выходе
A1K0 @A1K0 Автор вопроса
Входной строки с бд? сори я пока не очень понимаю.
За изложение тоже сори, по той дже причине)
Коротко изложить, то нам нужно просто найти совпадения в БД и распарсить на нужные строки типа «область, город, улица. Дом. кв»
Решения вопроса 2

ScriptKiddo @ScriptKiddo
Для начала вам нужно нормализовать адреса в базе. Сделать это можно, например, с помощью геокодера от Яндекса
/geocoder
Например, ищем «Москва, Тверская 6»
< "response": < "GeoObjectCollection": < "metaDataProperty": < "GeocoderResponseMetaData": < "request": "Москва,Тверская 6", "results": "10", "found": "1" >>, "featureMember": [ < "GeoObject": < "metaDataProperty": < "GeocoderMetaData": < "precision": "exact", "text": "Россия, Москва, Тверская улица, 6с1", "kind": "house", "Address": < "country_code": "RU", "formatted": "Россия, Москва, Тверская улица, 6с1", "postal_code": "125009", "Components": [ < "kind": "country", "name": "Россия" >, < "kind": "province", "name": "Центральный федеральный округ" >, < "kind": "province", "name": "Москва" >, < "kind": "locality", "name": "Москва" >, < "kind": "street", "name": "Тверская улица" >, < "kind": "house", "name": "6с1" >] >, "AddressDetails": < "Country": < "AddressLine": "Россия, Москва, Тверская улица, 6с1", "CountryNameCode": "RU", "CountryName": "Россия", "AdministrativeArea": < "AdministrativeAreaName": "Москва", "Locality": < "LocalityName": "Москва", "Thoroughfare": < "ThoroughfareName": "Тверская улица", "Premise": < "PremiseNumber": "6с1", "PostalCode": < "PostalCodeNumber": "125009" >> > > > > > > >, "name": "Тверская улица, 6с1", "description": "Москва, Россия", "boundedBy": < "Envelope": < "lowerCorner": "37.607242 55.757926", "upperCorner": "37.615452 55.762556" >>, "Point": < "pos": "37.611347 55.760241" >> > ] > > >
После чего загружаете в базу в нужной схеме и ищете по нормализованным данным
Ответ по адресу из вопроса
< "response": < "GeoObjectCollection": < "metaDataProperty": < "GeocoderResponseMetaData": < "request": "Киевская обл. , г. Киев, ул. Крещатик, дом 50, кв. 8", "results": "10", "found": "2" >>, "featureMember": [ < "GeoObject": < "metaDataProperty": < "GeocoderMetaData": < "precision": "exact", "text": "Украина, Киев, улица Крещатик, 50", "kind": "house", "Address": < "country_code": "UA", "formatted": "Украина, Киев, улица Крещатик, 50", "Components": [ < "kind": "country", "name": "Украина" >, < "kind": "province", "name": "Киев" >, < "kind": "locality", "name": "Киев" >, < "kind": "street", "name": "улица Крещатик" >, < "kind": "house", "name": "50" >] >, "AddressDetails": < "Country": < "AddressLine": "Украина, Киев, улица Крещатик, 50", "CountryNameCode": "UA", "CountryName": "Украина", "AdministrativeArea": < "AdministrativeAreaName": "Киев", "Locality": < "LocalityName": "Киев", "Thoroughfare": < "ThoroughfareName": "улица Крещатик", "Premise": < "PremiseNumber": "50" >> > > > > > >, "name": "улица Крещатик, 50", "description": "Киев, Украина", "boundedBy": < "Envelope": < "lowerCorner": "30.516022 50.440632", "upperCorner": "30.524232 50.445875" >>, "Point": < "pos": "30.520127 50.443254" >> >, < "GeoObject": < "metaDataProperty": < "GeocoderMetaData": < "precision": "other", "text": "Украина, Киевская область", "kind": "province", "Address": < "country_code": "UA", "formatted": "Украина, Киевская область", "Components": [ < "kind": "country", "name": "Украина" >, < "kind": "province", "name": "Киевская область" >] >, "AddressDetails": < "Country": < "AddressLine": "Украина, Киевская область", "CountryNameCode": "UA", "CountryName": "Украина", "AdministrativeArea": < "AdministrativeAreaName": "Киевская область" >> > > >, "name": "Киевская область", "description": "Украина", "boundedBy": < "Envelope": < "lowerCorner": "29.266411 49.179114", "upperCorner": "32.161466 51.554013" >>, "Point": < "pos": "30.456149 50.29807" >> > ] > > >
UPD: добавил ответ по адресу из вопроса.
Ответ написан более трёх лет назад
Нравится 3 2 комментария

ScriptKiddo, отличная мысль!
Если не ошибаюсь, геокодер отдаёт список совпадений. Можно брать первый результат в ответе. Но будет ли он правильным? ScriptKiddo, интересует твой опыт)
И кроме того, у геокодера есть ограничения по числу запросов. Хотя думаю их хватит, просто придётся парсить на протяжении нескольких дней.
Мне тоже интересна тема с обработкой адресов. Буду рад любым советам)

ScriptKiddo @ScriptKiddo
Ограничение — 25K запросов в сутки, но если результаты будете использовать в коммерческой деятельности, то все равно придется использовать платную версию API

A1K0, добро пожаловать в дивный мир распарсивания адресов)
Это «кроличья нора».
В идеале адреса в базу данных должны писаться через справочники (КЛАДР, ФИАС): выбираешь из словаря город, потом улицу и т.д.
Если же у тебя адрес зашит в одну строку, в одно текстовое поле в БД, то пользователи могут писать адрес всевозможными способами. Часто имеют место ошибки в написании улиц, использование черточек, дефисов, дробей, запятых, точек с запятой. Если база содержит сотни тысяч записей, то выверить все ошибки будет очень долго и муторно.
Если адрес строго формализован, то проблем почти нет. Парсишь через разделитель.
Но перед этим советую посчитать число этих разделителей в каждой строке. Может оказаться так, что у тебя в одну запись попали два адреса (регистрации и фактического проживания).
list_address = ["Киевская обл. , г. Киев, ул. Крещатик, дом 10, кв. 8", "Киевская обл. , г. Киев, ул. Крещатик, 2, 12", "Киевская обл. , г. Киев, ул. Крещатик, д.20, кв.118", "Киевская обл. ; Киев; Крещатик; 50-8", "Киевская обл. , г. Киев, пл. Незалежности, д.12-а, строение 3, помещение 8, офис. 33",] for adr in list_address: # допустим разделитель запятая # и корректный адрес должен состоять из 5 частей region, city, street, house, flat = "", "", "", "", "", if adr.count(",") == 4: adr = adr.split(",") region = adr[0] city = adr[1] street = adr[2] house = adr[3] flat = adr[4] print(region, city, street, house, flat) # распарсятся три адреса и пяти: # Киевская обл. г. Киев ул. Крещатик дом 10 кв. 8 # Киевская обл. г. Киев ул. Крещатик 2 12 # Киевская обл. г. Киев ул. Крещатик д.20 кв.118
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 1

Dimonchik @dimonchik2013
non progredi est regredi
но не копипастом функции, а пониманием исходных данных и методов преобразования
кому тамита парсер понадобится, а кому — простое векторное расстояние названия улицы от массива улиц в базе
Как парсить одну строку с одинаковыми тегами Python

есть сайт центробанка, мне нужно из него спарсить евро и доллар, зашёл в код, увидел там такую картину, так как я недавно начал изучать тему Парсинга, я не знаю как решить этот вопрос, буду рад вашей помощи, парсить нужно исключительно цена евро и доллара
Отслеживать
задан 7 июл 2022 в 13:34
1 1 1 бронзовый знак
Выделить таблицу как список списков. Список строк, каждая строка содержит несколько столбцов. А затем уже перебрать полученный массив и удалить все строки, первый(или какой там не знаю) элемент этой строки не равен USD или EU.
7 июл 2022 в 14:05
Ну вы бы ссылку на сайт хоть привели. Возможно, там вообще через pandas элементарно будет всё вытянуть.
7 июл 2022 в 14:33
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
import requests from bs4 import BeautifulSoup response = requests.get('https://cbr.ru/currency_base/daily/') soup = BeautifulSoup(response.content, 'html.parser') for q in soup.find_all('tr')[1:]: # id, letter_id, unit, name, course = [x.text for x in q.find_all('td')] id, letter_id, unit, name, course = map(lambda x: x.text, q.find_all('td')) if letter_id == 'USD' or letter_id == 'EUR': print(name, course)
Отслеживать
ответ дан 7 июл 2022 в 20:19
4,440 4 4 золотых знака 8 8 серебряных знаков 22 22 бронзовых знака
- python
- парсер
- beautiful-soup
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.21.1314
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
