Изменить строки с адресами на Python
Пример адресов
г. Москва, пл. Спартаковская, д. 14 стр. 3 этаж / ком. / офис 2/9/108
г. Москва, ул. 14-Я Парковая, д. 8 офис 144
г. Москва, проезд Строительный, д. 7А корп. 28 этаж 2, ком. 223
г. Москва, ул. Фрязевская, д. 10 стр. 2 этаж 4 пом. XXI ком. 8
г. Москва, ул. Студенческая, д. 20 кв. 18
г. Москва, проспект Мира, д. 70 этаж 1А П III К 3 офис 10
г. Москва, пер. Луков, д. 4 этаж ПОДВ пом. I ком. 8 РМ4Б
г. Москва, ул. Нагорная, д. 5 к. 4 этаж 1 ком. 11 офис 48
г. Москва, шоссе Энтузиастов, д. 56 стр. 32 пом. 329
г. Москва, ул. 3-Я Хорошёвская, д. 2 стр. 1 Э 3 П 21 К2 офис 5
г. Москва, набережная Бережковская, д. 20 стр. 5 пом. I ком. 3
г. Москва, вн.тер.г. муниципальный округ Старое Крюково, г Зеленоград, к. 903, кв. 327
Из адресов мне нужно получить только город,название улицы, номер дома. Без этажей, офисов, квартир и т.п. То есть
г. Москва, пл. Спартаковская, д. 14 стр. 3
г. Москва, ул. 14-Я Парковая, д. 8
г. Москва, проезд Строительный, д. 7А корп. 28
г. Москва, ул. Фрязевская, д. 10 стр. 2
г. Москва, ул. Студенческая, д. 20
г. Москва, проспект Мира, д. 70
г. Москва, пер. Луков, д. 4
г. Москва, проспект Рязанский, д. 86/1 стр. 1
г. Москва, проезд Электролитный, д. 1 корп. 3
У меня нет примеров кода, т.к. я не представляю с чего даже начать. Помогите плз
Ответы (1 шт):
Автор решения: Dmitry
→ Ссылка
Накидал тут немного, как это может быть
import csv
import re
# Данный паттерн ловит два вида значений
# или "д. 14 стр. 3" или "д. 14" или "д. 14 корп. 3"
pattern = r"д.\s+[А-Я0-9]+\s+корп.\s+\d+|д.\s+[А-Я0-9]+\s+стр.\s+\d+|д.\s+[А-Я0-9]+"
def usual_str(obj:str) -> str:
"""
здесь на вход подаем строку откуда надо вытащить
значение дома и строения, или только дома
"""
k = re.search(pattern, obj).group()
return k
with open("test.csv", encoding="utf-8") as csvfile:
a = csv.reader(csvfile)
for i in a:
# здесь я проверяю длину набора данных
# для основного массива данных длина равна 3
# для других значений длин, например последняя строка
# во входных данных, нужно писать отдельный обработчик
if len(i) == 3:
result = [i[0], i[1], usual_str(i[2])]
print(','.join(result))
так вот это мы имеем на выходе:
г. Москва, пл. Спартаковская,д. 14 стр. 3
г. Москва, ул. 14-Я Парковая,д. 8
г. Москва, ул. Фрязевская,д. 10 стр. 2
г. Москва, ул. Студенческая,д. 20
г. Москва, проспект Мира,д. 70
г. Москва, пер. Луков,д. 4
г. Москва, ул. Нагорная,д. 5
г. Москва, шоссе Энтузиастов,д. 56 стр. 32
г. Москва, ул. 3-Я Хорошёвская,д. 2 корп. 1 # вот здесь я подставил корп.
г. Москва, набережная Бережковская,д. 20 стр. 5
Это не все готовое решение, но направление вам. Необходимо написать обработку для данных вырывающихся из общей массы, либо найти общее и отталкиваться от логики. Также, re сейчас не ловит такие значения дома как 89/16. Тоже надо доработать