Кратко:Удаление из словаря по номеру записи. При удалении пследовательность должна подстраиваться под новый список. Проблемма в том, чтобы связать новый номер из последовательности к нужной записи в словаре. Подробности ниже.
Выводятся все записи в словаре из json файла. Понимаю, что в словарях нет индекса, но нужно, чтобы выводилось примерно так:
1.Запись№1
2.Запись№2
3Записть№3
4...
Вводится номер из клавиатуры в соответствии с тем что выше.
Удаляется запись под тем номером который выбрали. Я это реализовал, но если повторно запросить удаление по списку, то:
допустим сначала мы удалили №2, тогда в файле останутся объекты под номерами 1,3, 4,5,...
Когда мы выведем словарь в следующий раз мы не получим правильную последовательность которая будет соответствовать записям в словаре. Как быть в таком случае? Очень нужна помощь. Вот функция которая отвечает за удаление, а ниже полный код.
К сожалению есть только украинский язык.
def menu_4():
print('За якими ознаками видалити запис?', '1. По номеру в списку', '2. По наявності гарантії', sep='\n')
with open('zamov_f.json', 'r') as zamov_f:
zamov_f = json.load(open('zamov_f.json'))
if input() == '1':
for g1 in range(1, len(zamov_f) + 1):
pib_n2 = 'pib' + str(g1)
print(g1, zamov_f[pib_n2]['ПІБ'])
delet = input()
pib_n2 = 'pib' + delet
del zamov_f[pib_n2]
#print(tabulate(zamov_f[pib_n2].items(), headers=['Пункт', 'Параметр'], tablefmt="grid"))
with open('zamov_f.json', 'w') as zamov_f1:
json.dump(zamov_f, zamov_f1, indent=1, ensure_ascii=False)
elif input() =='2':
for g1 in range(1, len(zamov_f) + 1):
...
Весь код:
import json
import os
from tabulate import tabulate
def menu_1():
a1 = 1
with open('zamov_f.json', 'w') as zamov_f:
json.dump(a1, zamov_f, indent=2, ensure_ascii=False)
print('Файл створено')
menu()
def menu_2():
with open('zamov_f.json', 'r') as zamov_f:
zamov_f = json.load(open('zamov_f.json'))
if os.stat('zamov_f.json').st_size == 1:
print('Файл пустий')
else:
for g in range(1, len(zamov_f) + 1):
pib_n2 = 'pib' + str(g)
print(tabulate(zamov_f[pib_n2].items(), headers=['Пункт', 'Параметр'], tablefmt="grid"))
menu()
def menu():
print('Виберіть пункт з меню:')
print('1. Створення нового файлу замовлень на фарбування авто')
print('2. Перегляд існуючого файлу')
print('3. Додавання замовлень на фарбування')
print('4. Видалення записів з файлу')
print('5. Редагування записів')
print('6. Сортування записів')
print('7. Обслуговування запитів')
otvet = input()
if otvet == '1':
menu_1()
elif otvet == '2':
menu_2()
elif otvet == '3':
menu_3()
elif otvet == '4':
menu_4()
elif otvet == '5':
menu_5()
elif otvet == '6':
menu_6()
elif otvet == '7':
menu_7()
else:
print('Введені дані некоректні або не вірні!')
menu()
def menu_3():
o = 1
zamov_s = {}
while True:
while True:
print("Введіть Ім'я Прізвище замовника")
pib = input()
pib = pib.strip()
pib = pib.title()
pib = " ".join(pib.split())
pib2 = pib.split()
pib = pib2[0] + pib2[1]
if pib.isalpha() == True:
pib = pib2[0] + ' ' + pib2[1]
break
else:
print('''У вказаних даних неможна використовувати
цифри та спеціальні символи, а тільки букви
та пробіли.
''')
print('Виберіть тип фарби: ')
print('1. Металік', '2. Блиск', '3. Вініл', sep='\n')
tip = input()
if tip != '1' and tip != '2' and tip != '3':
print('Введені дані некоректні або не вірні!')
print('Виберіть клас фаби: ')
print('1. Економ', '2. Середній', '3. Преміум', sep='\n')
klas = input()
if klas != '1' and klas != '2' and klas != '3':
print('Введені дані некоректні або не вірні!')
print('Виберіть колір фарби: ')
print('1. Red', '2. Green', '3. Brown', '4. Black', '5. White', sep='\n')
color = input()
if color != '1' and color != '2' and color != '3' and color != '4' and color != '5':
print('Введені дані некоректні або не вірні!')
termin = int(input('Введіть термін роботи: '))
garant = input('Чи потрібна гарантія? (+/-) ')
if garant != '+' and garant != '-':
print('Введені дані некоректні або не вірні!')
if tip == '1':
tip = "Metalik"
elif tip == '2':
tip = "Blisk"
elif tip == '3':
tip = "Vinil"
if klas == '1':
klas = 'Ekonom'
elif klas == '2':
klas = 'Midl'
elif klas == '3':
klas = 'Premium'
if color == '1':
color = 'Red'
elif color == '2':
color = 'Green'
elif color == '3':
color = 'Brown'
elif color == '4':
color = 'Black'
elif color == '5':
color = 'White'
with open('baza_farb.json', 'r') as baza_f:
baza_f = json.load(open('baza_farb.json'))
prise = baza_f[tip][klas][color]
if 3 <= termin <= 5:
prise = prise + (prise * 15 / 100)
elif termin == 2:
prise = prise + (prise * 50 / 100)
if garant == '+':
prise = prise + (prise * 5 / 100)
pib_n = 'pib' + str(o)
zamov_s[pib_n] = {
'ПІБ': pib,
'Тип фарби': tip,
'Клас фарби': klas,
'Колір фарби': color,
'Термін роботи': termin,
'Гарантія на фарбу': garant,
'Ціна': prise
}
o = o + 1
with open('zamov_f.json', 'w') as zamov_s2:
json.dump(zamov_s, zamov_s2, indent=2, ensure_ascii=False)
print('Ввести наступне замовлення?(-/+)')
if input() == '-':
menu()
break
def menu_4():
print('За якими ознаками видалити запис?', '1. По номеру в списку', '2. По наявності гарантії', sep='\n')
with open('zamov_f.json', 'r') as zamov_f:
zamov_f = json.load(open('zamov_f.json'))
if input() == '1':
for g1 in range(1, len(zamov_f) + 1):
pib_n2 = 'pib' + str(g1)
print(g1, zamov_f[pib_n2]['ПІБ'])
delet = input()
pib_n2 = 'pib' + delet
del zamov_f[pib_n2]
#print(tabulate(zamov_f[pib_n2].items(), headers=['Пункт', 'Параметр'], tablefmt="grid"))
with open('zamov_f.json', 'w') as zamov_f1:
json.dump(zamov_f, zamov_f1, indent=1, ensure_ascii=False)
elif input() =='2':
for g1 in range(1, len(zamov_f) + 1):
...
menu()