Форум сайта python.su
Помогите пожалуйста!
Пытаюсь спарсить телефоны из файла с помощью рег. выражений, но безуспешно.
Инфа из файла:
—————————————–
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)
Офлайн
Тут проще не регэкспом сделать а построчно читать этот файл и если находишь строку “Device (Owner name)” то из предыдущей выдираешь имя например так:
" ".join(PredidushaiaStroka.split()[1:])
"Phone number +37256818443".split()[2]
Отредактировано krok64 (Июнь 28, 2017 11:55:03)
Офлайн
Не нужно каждый раз сочинять регулярку, в интернете много готовых. Например:
>>> re.findall(r"\+?[78][-\(]?\d{3}\)?-?\d{3}-?\d{2}-?\d{2}", "Vanya Nogin; +79261234567") ['+79261234567']
Отредактировано Rodegast (Июнь 28, 2017 12:36:52)
Офлайн
>>> 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')] >>>
Офлайн
py.user.nextОГРОМНОЕ СПАСИБО!!!
Офлайн
krok64
Тут проще не регэкспом сделать а построчно читать этот файл и если находишь строку “Device (Owner name)” то из предыдущей выдираешь имя например так:
Офлайн
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])
Офлайн
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])
Офлайн