Работа с файлом. Python
Не могу понять, почему не находит номер рейса в файле, все время выводит "Не найден".
import csv
print("1.Добавить информацию\n2.Поиск информации")
x = int(input())
if x == 1:
#Ввод пункта назначения рейса
print("Введите место назначения")
place = input().upper()
#Ввод номера рейса
print("Введите номер рейса")
num = input().upper()
#Ввод тип самолета
print("Введите тип самолета")
air = input().upper()
#Запись вводимых данных в файл
with open("fly.txt", mode = "a", encoding = "utf-8", newline = "") as f:
file_writer = csv.writer(f, delimiter = ";", lineterminator = "\r")
file_writer.writerow([place, num, air])
f.close()
if x == 2:
d =[]
with open("fly.txt", encoding = "utf-8") as f:
reader = csv.DictReader(f, delimiter = ";")
for row in reader:
d.append(row)
print("Введите номер")
num = input().upper()
d1 = []
for i in d:
if i.get('номер рейса') == num:
d1.append(i)
if len(d1) == 0:
print("Не найден")
else:
for i in d1:
print(f"{i.get('название пункта назначения рейса')} {i.get('номер рейса')} {i.get('тип самолета')}")
Ответы (1 шт):
При содании экземпляра csv.DictReader, необходимо указать параметр:
fieldnames=['название пункта назначения рейса', 'номер рейса', 'тип самолета'])
В документации на DictReader все написано:
Если fieldnames не указано, тогда в качестве имен полей будет использована первая строка.
А у вас первой строкой имена полей не указываются. Из-за чего:
i.get('номер рейса')- не имеет смыслаi.get('название пункта назначения рейса')- не имеет смыслаi.get('тип самолета')- не имеет смысла
А после указания fieldnames все заработает как надо. Вас спасла бы отладка, её необходимо было проделать. Как?
with open("fly.txt", encoding = "utf-8") as f:
reader = csv.DictReader(f, delimiter = ";")
for row in reader:
print(row) # НАПРИМЕР, РАСПЕЧАТАТЬ, ЧТО ЗА ЭЛЕМЕНТЫ ПОПАДАЮТ В d!!!
d.append(row)
И все стало бы очевидно. Ответ либо нашли бы сами в документации - кладезь ответов на многие вопросы. Либо смогли задать более точный вопрос.
PPS: f.close() при использовании with open... противопоказан, все уже делается автоматически, а ваша "самодеятельность" может привести к странным/страшным ошибкам.