извлечение имени, электронной почты и номера и сохранение их в переменной

#python #parsing #extract

#python #синтаксический анализ #извлекаем

Вопрос:

Я хочу извлечь имя, электронную почту и номер телефона всех разговоров, а затем сохранить их в разные переменные. Я хочу сохранить его следующим образом: a = max, b = email и так далее.

Это мой текстовый файл:

 [11:23] max : Name : max

Email : max@gmail.com

Phone : 01716345678

[11:24] harvey : hello there how can i help you
[11:24] max : can you tell me about the latest feature
  

и это мой код. Чего мне здесь не хватает?

 in_file = open("chat.txt", "rt")

contents = in_file.read()
#line: str
for line in in_file:
    if line.split('Name :'):
        a=line
        print(line)

    elif line.split('Email :'):
        b = line

    elif line.split('Phone :'):
        c = line


    else:
        d = line
  

Комментарии:

1. Каким вы ожидаете быть результат line.split() ?

2. split никогда не возвращает пустой список, даже если разделитель не найден в строке. В этом случае он возвращает список со всей строкой в виде одного элемента, так что if line.split('Name :') всегда будет True , следовательно, ни один из elif блоков не выполняется

Ответ №1:

Это совсем не то, что split делает. Возможно, вы путаете это с in .

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

 import re

string = '''[11:23] max : Name : max

Email : max@gmail.com

Phone : 01716345678

[11:24] harvey : hello there how can i help you
[11:24] max : can you tell me about the latest feature'''

keys = ['Name', 'Email', 'Phone', 'Text']
result = re.search('. Name : (w ). Email : ([w@.] ). Phone : (d )(. )', string, flags=re.DOTALL).groups()

{key: data for key, data in zip(keys, result)}
  

Вывод:

 {'Name': 'max',
 'Email': 'max@gmail.com',
 'Phone': '01716345678',
 'Text': 'nn[11:24] harvey : hello there how can i help youn[11:24] max : can you tell me about the latest feature'}
  

Ответ №2:

Удалите эту строку в своем коде: «contents = in_file.read()»

Кроме того, используйте «в» вместо «разделить».:

 in_file = open("chat.txt", "rt")
for line in in_file:
    if ('Name') in line:
        a=line
        print(a)
    elif 'Email' in line:
        b = line
        print(b)
    elif 'Phone' in line:
        c = line
        print(c)
    else:
        d = line
        print(d)