Python

Скрипт не работает как надо

Учу основы Python :)
Скрипт не работает как надо, пользователь задаёт имя и все соответствующие сообщения Ани или Миши (со строк текстового файла) выводятся на экран :

Текстовый файл:
Аня:
"Привет"
Миша:
"Как дела"
Аня
"Нормально"
и т.д.

Мой код:

import os
import sys

def read_file(filename):
try:
messages = []
with open(filename, 'r') as log_file:
lines = log_file.readlines()
with open(filename, 'r') as log_file:
for line in enumerate(lines):
messages.append(line)
return messages
except FileNotFoundError as e:
print('Error: The file "' + filename + '" could not be found.')
sys.exit()


def display_entry(name, message):
print(f'[{name}] --> ' + message)

def main():
if len(sys.argv) < 2:
print('Error: you must specify filename.')
sys.exit()
filename = sys.argv[1]
messages = read_file(filename)
search_name = input('Enter the name to search for: ').capitalize()
for name, message in messages:
if search_name == name:
display_entry(name[0], message)

if __name__ == '__main__':
main()
Импорты сис и ос, траи, эксепты, дефы, __main__... Это точно ваш код, а не скопипасченный?
Скрипт нормальный, вы его неправильно используете видимо
Вам его надо запускать сразу с параметром наименования файла
_ Kairat
_ Kairat
55 095
Лучший ответ
Алишер Зекен да, мой, но эти три метода обязательны по условию
Помогите!
Алишер Зекен Благодарю!!!!!!!!!!!!
Если копируете сюда код, используйте внизу кнопку <>
Вывести текстовый файл на экран можно двумя строками кода
 with open("path/to/file") as f:
print f.read()

# Ключевое слово with автоматически закрывает файл, когда
# вывод файла закончится
Cан Саныч
Cан Саныч
76 466
Алишер Зекен Спасибо за совет, но эти три метода обязаловка по условию
Алишер Зекен
 import sys 

def read_file(filename):
messages = []
with open(filename, 'r') as log_file:
lines = log_file.readlines()
with open(filename, 'r') as log_file:
for line in lines:
messages.append(line)
return messages

def display_entry(name, message):
print(f'[{name}] --> ' + message)

def main():
filename = sys.argv[1]
messages = read_file(filename)
search_name = input('введите имя: ').capitalize()
for name, message in messages:
if search_name == name:
display_entry(name[0], message)

if __name__ == '__main__':
main()
Cан Саныч Ошибка
в строке 19: for name, message in messages:

ValueError: too many values to unpack (expected 2)
ValueError: слишком много значений для распаковки (ожидается 2)

попробуйте заменить 19-б строку на такую.
    for name in messages: 
Алишер Зекен Что-то странное получилось:

[Аня] --> Аня

[Аня] --> Привет

[Аня] --> Миша

[Аня] --> Нормально
Алишер Зекен Пользователь задаёт имя и все соответствующие сообщения Ани или Миши (со строк текстового файла) выводятся на экран :

Текстовый файл .txt:
Аня:
"Привет"
Миша:
"Как дела"
Аня:
"Нормально"

Если ввести имя Аня результат поиска должен быть:
[Аня] --> Привет
[Аня] --> Нормально
Cан Саныч Я от питона давно отошел.
Заходите на https://www.cyberforum.ru
в раздел Python.
Я на этом форуме с 2011 года сижу.
Там точно с кодом помогут профессионально.
Девочка, не тем ты себе голову забиваешь, чтобы понимать такой код и использовать так много разных методов из библиотек дополнительных, тебе, сначала, нужно и вправду изучить основы питона, а не использовать н-ное количество доп. библиотек. Всё это можно написать в раз 10 легче и оптимизированнее
Ihsan Ulug
Ihsan Ulug
688
Алишер Зекен Злой ты!!!
Ihsan Ulug Я не злой, а лишь говорю факты
 def read_file(filename):   
messages = []
with open(filename, 'r', encoding='utf-8') as log_file:
lines = log_file.readlines()
with open(filename, 'r', encoding='utf-8') as lines:
for line in lines:
messages.append(line.replace('\n', '').strip())
message_dict = {}
for i in range(0, len(messages), 2):
if messages[i] not in message_dict:
message_dict[messages[i]] = [messages[i + 1]]
else:
message_dict[messages[i]].append(messages[i + 1])
return message_dict

def display_entry(name, message):
print(f'[{name}:] --> ' + message)

def main():
filename = 'dialog.txt' # Сюда нужно вставить путь к файлу
messages = read_file(filename)
search_name = input('введите имя: ').capitalize() + ':'

if search_name in messages:
message = ', '.join(messages[search_name])
display_entry(search_name, message)
else:
print('Такого имени не обнаружено!')

if __name__ == '__main__':
main()
Алишер Зекен Здравствуйте Юсуф, спасибо вам за ответ, но нам нельзя использовать \n или dict(), только list или tuple