Уведомления

Группа в Telegram: @pythonsu

#1 Май 22, 2024 21:22:20

DOTTRAM
Зарегистрирован: 2024-05-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Раставить текст по столбцам

Добрый день. Стоит такая задача.

Есть текст. Текст нужно распределить по столбцам exel. Столбцы; Название компании, Имя и фамилия, Адрес, номер телефона, электронная почта. Сложность в том что текст может начинаться с алфавита, потом номера страницы и далее выше перечисленное(столбцы которые указывал выше.). Пример текста ниже(кусок текста).

Пока что хватило знаний написать вот эту часть. Заранее спасибо.

from bs4 import BeautifulSoup
import requests

url = "https://fliphtml5.com/cmxpr/dlsm/2023_Membership_Directory/"

r = requests.get(url)
soup = BeautifulSoup(r.text, ‘lxml’)
tear = soup.find_all('p')




C
C Can Store Inc.
Jessica Fielding
#16 11010 46th St SE
Calgary, AB T2C 4Z5
Canada
(403) 452-8889

Bobbi Malana
#16 11010 46th St SE
Calgary, AB T2C 4Z5
Canada
(403) 452-8889

Mel Malana
#16 11010 46th St SE
Calgary, AB T2C 4Z5
Canada
(403) 452-8889

23
Calida Inc.
David Potvin
173, rue Joseph-Gagne Nord
La Baie, QC G7B 4T2
Canada
(418) 718-3130

Marie-Pier Simard
173, rue Joseph-Gagne Nord
La Baie, QC G7B 4T2
Canada
(418) 290-8051

D
D. Edward Leasing Company
Douglas Dively
250 Seanor Road
Windber, PA 15963
(800) 635-8756

Brian Mowery
250 Seanor Road
Windber, PA 15963
(814) 467-5434

Crossroads Trailer Rental
John Bransford
2621 Corner Rock Road
Mian-Midlothian, VA 23113
(804) 378-6222

CS Leasing
Vanessa Garcia
16945 Northchase Drive, Ste 2140
Houston, TX 77060
(28) 137-7200

Rick Reid
14510 Beaumont Highway
Houston, TX 77049
(832) 418-2499

CSI Group LLC
Heidi Gibert
1212 Hancock St
Suite 305
Quincy, MA 02169
(617) 845-5249

Stephan Howard
1212 Hancock St
Suite 305
Quincy, MA 02169
(617) 797-9766

Jessie Morris
1212 Hancock St
Suite 305
Quincy, MA 02169
(617) 845-5246

MEMBERSHIP ROSTER
39
Dakota Containers
Kelly Torrence
PO box 742
Sturgis, SD 57785
(605) 884-5500

H
H.D.S. Mobile Storage
Jimmy Hawley
PO Box 1121
Lindale, TX 75771
(903) 882-4839

Haashold Storage
Dennis Haas
5221 Pleasant Ridge School Road
Freeburg, IL 62243
(618) 531-2731

Hale Trailer Brake and Wheel, Inc.
Jason D’amico
PO Box 1400
Voorhees, NJ 08043
(856) 786-1330

Hamilton Container Services Inc.
Wally Hansan
6360 W. Emerald Parkway
Building 2 Unit 108-111
Monee, IL 60449
(708) 906-5188

Hammar Lift, Inc.
David Gustafsson
417 1st Ave
Dallas, TX 75226
(949) 293-0028

Grand View Container Trading - USA
James Granada
8350 NW 52nd Terrace
Suite 209
Doral, FL 33166
(305) 406-0348

Giovanna Nastasi
8350 NW 52nd Terrace
Suite 209
Doral, FL 33166
(786) 210-4443


with open(“index.html”, “w”, encoding=“utf-8”) as file:
for line in tear:
file.write(line.text + ‘\n’)

Отредактировано DOTTRAM (Май 22, 2024 21:38:21)

Офлайн

#2 Май 23, 2024 08:42:30

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Раставить текст по столбцам

Весьма простая задача
Смотри: в независимости от того что у тебя идет в начале каждого блока, мы наблюдаем стабильные значения с конца каждого блока

0. C
1. C Can Store Inc.
2. Jessica Fielding
3. #16 11010 46th St SE
4. Calgary, AB T2C 4Z5
5. Canada
6. (403) 452-8889

То есть тебе необходимо создать список “с конца” ограничив его длину 5 позициями
(дополнительно сделав проверку на 3 строку и обработав адрес по координатам если строка начинается с #)



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Май 23, 2024 09:17:16

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9796
Репутация: +  849  -
Профиль   Отправить e-mail  

Раставить текст по столбцам

DOTTRAM
Сложность в том что текст может начинаться с алфавита, потом номера страницы и далее выше перечисленное(столбцы которые указывал выше.).
Надо сначала почистить эти записи. Сначала чистишь все записи от букв алфавита, чтобы их не осталось. Потом, после этого, чистишь все записи от номеров страниц, чтобы их тоже не было больше. И вот уже после этого ты можешь эти чистые записи, очищенные от всего ненужного, обрабатывать, чтобы разложить их на отдельные поля.

Это, знаешь, как картошку варить. Сначала нужно её взять из пакета и отмыть от земли. Потом нужно взять отмытую от земли картошку и почистить её, сняв кожуру. После этого надо отмыть очищенную картошку от грязи, которая там ещё осталась в небольших количествах. Потом уже всё чистое можно нарезать кусочками.

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



Отредактировано py.user.next (Май 23, 2024 09:18:18)

Офлайн

#4 Май 24, 2024 01:23:00

DOTTRAM
Зарегистрирован: 2024-05-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Раставить текст по столбцам

py.user.next


Спасибо за ответ. Дело в том что у одной компании могут быть несколько контактов. И вот эти все контакты нужно указать. Скрин во вложении.

Прикреплённый файлы:
attachment Screenshot_1.jpg (158,8 KБ)

Офлайн

#5 Май 24, 2024 01:23:22

DOTTRAM
Зарегистрирован: 2024-05-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Раставить текст по столбцам

ZerG
Весьма простая задачаСмотри: в независимости от того что у тебя идет в начале каждого блока, мы наблюдаем стабильные значения с конца каждого блока

Спасибо за ответ. Дело в том что у одной компании могут быть несколько контактов. И вот эти все контакты нужно указать. Скрин во вложении.

Прикреплённый файлы:
attachment Screenshot_1.jpg (158,8 KБ)

Офлайн

#6 Май 24, 2024 01:45:22

DOTTRAM
Зарегистрирован: 2024-05-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Раставить текст по столбцам

И там всё слитно. Это просто я разделил. Чтобы понятно было что требуется. А так всё выглядит вот так.

C Can Store Inc.
Jessica Fielding
#16 11010 46th St SE
Calgary, AB T2C 4Z5
Canada
(403) 452-8889

Bobbi Malana
#16 11010 46th St SE
Calgary, AB T2C 4Z5
Canada
(403) 452-8889

Mel Malana
#16 11010 46th St SE
Calgary, AB T2C 4Z5
Canada
(403) 452-8889

CAI International Inc.
Maria Bauer
56 Leslie Road
Colonia, NJ 07067
(732) 397-7116

Terry Wei
11744 Bartlett Ave
Adelanto City, CA 92301
(626) 861-6200

Vicky Zhao
11744 Bartlett Ave
Adelanto City, CA 92301
(626) 861-6200

BTS
Steve Hossa
10 South La Salle Ave
Suite 1910
Chicago, IL 60611
(708) 426-9149

Budget Box Mobile Storage
Jay Williams
12549 East Skelly Drive
Tulsa, OK 74128
(918) 234-3444

Built Rite Industries
Craig Rapoza
19523 S. Susana Rd.
Compton, CA 90221
(562) 366-0784

Grant Rapoza
19523 S. Susana Rd.
Compton, CA 90221
(562) 366-0784

BuiltBox LLC
Sam Popa
PO Box 5903
Springfield, MO 65801
(417) 705-0797

MEMBERSHIP ROSTER
23

Офлайн

#7 Май 24, 2024 04:09:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9796
Репутация: +  849  -
Профиль   Отправить e-mail  

Раставить текст по столбцам

DOTTRAM
Дело в том что у одной компании могут быть несколько контактов.
Ну от мусора ты должен сначала почистить всё. Не бойся обрабатывать один и тот же текст много-много раз. То есть первый раз ты проходишь и удаляешь только номера страниц и больше ничего. Второй раз по тексту без номеров страниц, так как они уже удалены, ты проходишь и удаляешь буквы алфавита и больше ничего. Третий раз ты проходишь по тексту без номеров страниц и без букв алфавита и вставляешь там разделители записей, например. Четвёртый раз ты проходишь и уже берёшь каждую запись по разделителю записи и, если у этой записи есть имя компании, то оставляешь его, а если у этой записи нет имени компании, то добавляешь его, как будто оно там было. В итоге у тебя получаются полные записи, разделённые конкретным разделителем записей. И вот после этого всего ты уже имеешь чистые и подготовленные данные для разделения на поля. Дальше ты просто проходишь по этим записям, отделяешь их друг от друга по конкретному разделителю записи, а не приблизительно, и потом передаёшь в функцию разделения одной записи на отдельные поля. В каждой записи у тебя будет имя компании, имя человека, адрес, телефон. Так ты получаешь уже список словарей, где каждый словарь - это одна запись, разделённая по полям.

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

DOTTRAM
MEMBERSHIP ROSTER
23
Вот видишь, да, вот эти две строки? Вот ни первой строки, ни второй строки не должно быть в обрабатываемых данных. Где ты вот это сделал - удалил мусор? Нигде. Вот сейчас ты будешь сидеть и отделять через предикат какой-нибудь, что “вот это - мусор, его не надо на поля раскладывать”, а потом дальше “а вот это данные нужные, их надо на поля разложить”. В итоге у тебя мешанина получается и ты сам не знаешь, как отделить поля от мусора, а мусор от полей. А всё потому, что ты не почистил их. Ты не почистил картошку, а бросил её вариться в кастрюлю прямо так, прямо в земле, прямо в кожуре и так далее. Посчитал это неважным, типа “ну а чо такого? главное, чтобы она сварилась”.



Отредактировано py.user.next (Май 24, 2024 04:21:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version