#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)