Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 28, 2017 11:29:28

philips2009
Зарегистрирован: 2017-05-09
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

RegExp

Помогите пожалуйста!
Пытаюсь спарсить телефоны из файла с помощью рег. выражений, но безуспешно.
Инфа из файла:
—————————————–
109 Vasya Pupkin

Device (Owner name)

Photo
Apple iPhone 7 (XXX
XXX)
Phones

Phone number +35354354354

Data source Event Log


110 Andrey Trubkin

Device (Owner name)

Photo
Apple iPhone 7 (XXX
XXX)
Phones

Phone number +356854453645

Data source Event Log


111 Vanya Nogin

Device (Owner name)

Photo
Apple iPhone 7 (XXX
XXX)
Phones

Phone number +3735435321

Data source Event Log
————————————————-
Хотелось бы по данному шаблону:
Vasya Pupkin;+355435313
Andrey Trubkin;+353541321
Vanya Nogin;+3735435143251


ЗАРАНЕЕ БЛАГОДАРЮ!!!

Отредактировано philips2009 (Дек. 29, 2017 14:08:09)

Офлайн

#2 Июнь 28, 2017 11:51:36

krok64
Зарегистрирован: 2017-04-04
Сообщения: 75
Репутация: +  11  -
Профиль   Отправить e-mail  

RegExp

Тут проще не регэкспом сделать а построчно читать этот файл и если находишь строку “Device (Owner name)” то из предыдущей выдираешь имя например так:

 " ".join(PredidushaiaStroka.split()[1:])
а если строка начинается на Phone number то выдираешь оттуда телефон, например вот так:
 "Phone number +37256818443".split()[2]
склеиваешь его с именем и записываешь куда надо. и так до конца файла.

Отредактировано krok64 (Июнь 28, 2017 11:55:03)

Офлайн

#3 Июнь 28, 2017 12:25:26

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2832
Репутация: +  186  -
Профиль   Отправить e-mail  

RegExp

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

 >>> re.findall(r"\+?[78][-\(]?\d{3}\)?-?\d{3}-?\d{2}-?\d{2}", "Vanya Nogin; +79261234567")
['+79261234567']



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Июнь 28, 2017 12:36:52)

Офлайн

#4 Июнь 28, 2017 15:28:30

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

RegExp

  
>>> import re
>>> 
>>> text = """
... 109 Vasya Pupkin
... 
... Device (Owner name)
... 
... Photo
... Apple iPhone 7 (XXX
... XXX)
... Phones
... 
... Phone number +359878576300
... 
... Data source Event Log
... 
... 
... 110 Andrey Trubkin
... 
... Device (Owner name)
... 
... Photo
... Apple iPhone 7 (XXX
... XXX)
... Phones
... 
... Phone number +359879283688
... 
... Data source Event Log
... 
... 
... 111 Vanya Nogin
... 
... Device (Owner name)
... 
... Photo
... Apple iPhone 7 (XXX
... XXX)
... Phones
... 
... Phone number +37256818443
... 
... Data source Event Log
... """
>>> 
>>> pat = r'\d+ (.+?)\n.*?Phone number ([+0-9]+).*?Data source Event Log'
>>> 
>>> out = re.findall(pat, text, re.DOTALL)
>>> out
[('Vasya Pupkin', '+359878576300'), ('Andrey Trubkin', '+359879283688'), ('Vanya Nogin', '+37256818443')]
>>>



Офлайн

#5 Июнь 28, 2017 16:32:34

philips2009
Зарегистрирован: 2017-05-09
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

RegExp

py.user.next
ОГРОМНОЕ СПАСИБО!!!
ВЫРУЧИЛ

Офлайн

#6 Июнь 29, 2017 11:12:42

philips2009
Зарегистрирован: 2017-05-09
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

RegExp

krok64
Тут проще не регэкспом сделать а построчно читать этот файл и если находишь строку “Device (Owner name)” то из предыдущей выдираешь имя например так:

А можешь прописать весь код, пожалуйста.

Офлайн

#7 Июнь 29, 2017 14:45:04

krok64
Зарегистрирован: 2017-04-04
Сообщения: 75
Репутация: +  11  -
Профиль   Отправить e-mail  

RegExp

philips2009
А можешь прописать весь код, пожалуйста.
Можно, но зачем. Выше уже предложили вариант с регэкспом.
 fname='phones.txt'
with open(fname) as f:
    content = f.readlines()
for idx, line in enumerate(content):
	if line.startswith('Device'):
		 name=" ".join(content[idx-2].split()[1:])
	if line.startswith('Phone number'):
		print(name+";"+line.split()[2])

Офлайн

#8 Июль 4, 2017 15:06:34

philips2009
Зарегистрирован: 2017-05-09
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

RegExp

krok64
  fname='phones.txt'
with open(fname) as f:
    content = f.readlines()
for idx, line in enumerate(content):
	if line.startswith('Device'):
		 name=" ".join(content[idx-2].split()[1:])
	if line.startswith('Phone number'):
		print(name+";"+line.split()[2])

работает отлично
СПАСИБО

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version