Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 11.01.2022
Сообщений: 3

Проверка и запрет создания существующего значения

11.01.2022, 12:07. Показов 843. Ответов 8

Студворк — интернет-сервис помощи студентам
Всем доброго дня. Сразу скажу, что python первый мой язык и я только начинаю его изучать, так что вопросы могут показаться очень глупыми.
Есть вот такой скрипт:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import json
import re
import string
 
 
while True:
    print("1. Добавить новую запись пользователя")
    print("2. Добавить организацию")
    print("3. Поиск по записям")
    print("0. выйти из программы")
    cmd = input("Выберите пункт: ")
 
 
    if cmd == "1":
      print ("Ввод данных")
 
      data = {}
      
      flag = True
      while flag:
          if "ID" in data:
              print ("ID существует")
              flag = False
              break
          else:
              try:
                 data["ID"] = int(input("Введите ID: "))
                 flag = False
              except:
                 print("Вводимое в ID должно быть целым числом!")
 
 
      
      print ("Введите ФИО")
 
      data["Name"] = input()
 
      print ("Введите email")
      
      data["Email"] = input()
 
      print ("Введите номер телефона")
 
      data["Phone"] = input()
 
      print ("Введите ID компании")
      data["companyID"] = input()
      
 
      with open("users.json", "a+") as file:
               file.write('\n')
               json.dump(data, file,ensure_ascii=False )
 
 
    elif cmd == "2":
      print ("Ввод данных")
 
      data = {"companyID": ''}
      
      while (not data["companyID"].isdigit()):
          data = {"companyID": input('Введите ID компании: ')}
          if (not data["companyID"].isdigit()): 
              print('ID необходимо указать цифрами!')
              
      
      print ("Введите название компании")
 
      data["Name"] = input()
 
      print ("Введите email")
      
      data["Email"] = input()
 
      print ("Введите номер телефона")
 
      data["Phone"] = input()
      
 
      with open("users.json", "a+") as file:
               file.write('\n')
               json.dump(data, file,ensure_ascii=False )
 
 
 
    elif cmd == "3":
        while True:
            print("1. Поиск по пользователям")
            print("2. Поиск по организациям")
            cmd = input("Выберите пункт: ")
            if cmd == "1":
              print ("Введите ID пользователя")
              w = input("Введите ID : "   )
              with open("Users.json") as fin:
                  for s in fin.readlines():
                     if s.find(w) > -1:
                       print(s.strip())
                       
            elif cmd == "2":          
                print ("Введите ID компании")
                w = input("Введите ID : "   )
                with open("Users.json") as fin:
                    for s in fin.readlines():
                       if s.find(w) > -1:
                         print(s.strip())
 
    
    elif cmd == "0":
                    break

Есть несколько вопросов, которые пока самому решить не удалось.
1. Как корректно сделать запрет на создание дублей в поле ID. Допустим при создании пользователя вводится значение ID которое уже есть в данном файле у другого пользователя, надо что бы появлялось сообщение что ID уже существует и дальше пользователя не пускает.
Сейчас эта часть выглядит вот так

Python
1
2
3
4
5
6
7
8
9
10
11
12
flag = True
      while flag:
          if "ID" in data:
              print ("ID существует")
              flag = False
              break
          else:
              try:
                 data["ID"] = int(input("Введите ID: "))
                 flag = False
              except:
                 print("Вводимое в ID должно быть целым числом!")
Оно не отрабатывает как нужно. Формат записи в файле выглядит вот так

{"ID": 1, "Name": "Тестовый пользователь", "Email": "test@test.test", "Phone": "+79998884455", "companyID": "1"}

2. Вопрос по поиску - сейчас поиск отрабатывает так, что выдает все строки с совпадениями, как сделать поиск строго по ID и получать весь блок {} с соответствующим ID?.
Сейчас выглядит вот так

Python
1
2
3
4
5
w = input("Введите ID : "   )
              with open("Users.json") as fin:
                  for s in fin.readlines():
                     if s.find(w) > -1:
                       print(s.strip())
python 3.10
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.01.2022, 12:07
Ответы с готовыми решениями:

Проверка существующего значения в БД
Здравствуйте! Существует таблица с такими полями и значениями: Нужно что бы алгоритм подсчитывал общее количество нагрузки(часов) по...

JTable проверка значения ячейки и запрет перевода фокуса
Доброе время суток Всем. Помогите кто сможет, у меня следующая проблема не знаю как решить. Работаю с JTable, как сделать проверку...

как организовать запрет создания элемента справочника с наименованием , существующим в справочнике - запрет задваивания
Здравствуйте, скажите пожалуйста, как организовать запрет создания элемента справочника с наименованием элемента, который существует в...

8
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
11.01.2022, 18:44
первая ошибка
Python
1
2
3
4
5
6
7
8
9
10
11
12
while True:
    print("1. Добавить новую запись пользователя")
    print("2. Добавить организацию")
    print("3. Поиск по записям")
    print("0. выйти из программы")
    cmd = input("Выберите пункт: ")
 
 
    if cmd == "1":
      print ("Ввод данных")
 
      data = {}
как вы думаете если я раз 50 буду добавлять новую запись то что будет в словаре? ну что бы вы не гадали я отвечу - там будет одна последняя запись. отсюда поиск совпадений при новых вводах теряет смысл
1
172 / 112 / 65
Регистрация: 26.06.2020
Сообщений: 334
12.01.2022, 04:45
Цитата Сообщение от bazilio57 Посмотреть сообщение
{"ID": 1, "Name": "Тестовый пользователь", "Email": "test@test.test", "Phone": "+79998884455", "companyID": "1"}
"ID" - это, типа, ключ?
Цитата Сообщение от bazilio57 Посмотреть сообщение
как сделать поиск строго по ID и получать весь блок {} с соответствующим ID?.
Напрашивается словарь, в котором ключ - это ID (не "ID"), а значение по этому ключу - список с данными или словарь.

Добавлено через 1 час 33 минуты
Цитата Сообщение от bazilio57 Посмотреть сообщение
1. Как корректно сделать запрет на создание дублей в поле ID.
Python
1
2
3
4
5
6
7
8
9
      while True:
          try:
              id = int(input("Введите ID: "))
              if (id in data):
                  print ("ID существует") 
              else:
                  break
          except:
              print("Вводимое в ID должно быть целым числом!")
0
0 / 0 / 0
Регистрация: 11.01.2022
Сообщений: 3
12.01.2022, 10:35  [ТС]
Однако он нормально записывает данные файл, каждую запись с новой строки. Т.е. сохраняет не только последнюю запись, а все которые были внесены.
0
 Аватар для Aviz__
2759 / 2066 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
12.01.2022, 10:37
Цитата Сообщение от bazilio57 Посмотреть сообщение
Как корректно сделать запрет на создание дублей в поле ID.
например, используя ооп, так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class PersonRecords:
    __staticId = 0
 
    def __init__(self, name_p='Captain Nemo'):
        PersonRecords.__staticId += 1
        self.id = PersonRecords.__staticId
        self.name = name_p
        if name_p == 'Prince Dakkar':
            self.name = 'Captain Nemo'
 
    def __repr__(self):
        return self.name + " -> " + str(self.id)
 
print(PersonRecords('Pupic'))
print(PersonRecords())
print(PersonRecords('Prince Dakkar'))
без ооп эта простенькая задача принесет много боли и страданий!
0
172 / 112 / 65
Регистрация: 26.06.2020
Сообщений: 334
12.01.2022, 17:40
Цитата Сообщение от bazilio57 Посмотреть сообщение
Однако он нормально записывает данные файл, каждую запись с новой строки. Т.е. сохраняет не только последнюю запись, а все которые были внесены.
Каждый раз в файл добавляется новый словарь. Получается файл словарей. Тебе разве это нужно? Цель какая?
0
0 / 0 / 0
Регистрация: 11.01.2022
Сообщений: 3
12.01.2022, 17:47  [ТС]
Исключительно учебная. Скрипт, который может парсить директорию на наличие созданного файла, если его нет, то создать json или дописать уже в существующий данные. Создавать и добавлять пользователей/компании, потом по этому же файлу проводить поиск по ID или ID компании и выдавать блок информации точно соответствующий ID, а не просто все совпадающие значения ( допустим поиск по ID 12 выдаст условно так же блок с инфой, в которой в номере телефона будет 12).

Это общая цель всего скрипта
0
172 / 112 / 65
Регистрация: 26.06.2020
Сообщений: 334
12.01.2022, 18:30
Цитата Сообщение от ll45 Посмотреть сообщение
Напрашивается словарь, в котором ключ - это ID (не "ID"), а значение по этому ключу - список с данными или словарь.
То есть: в файле один словарь, в котором, по ID, находятся вложенные словари.

Добавлено через 11 минут
Определение словаря, который будет записываться в файл, выносишь за цикл, в цикле создаёшь временный словарь, в который заносятся данные, после этого добавляешь, по введённому id, этот словарь в общий. Добавляешь пункт: сохранить в файл, при выборе которого общий словарь будет записываться в файл (или запись в файл при выходе из проги).

Добавлено через 20 минут
Цитата Сообщение от ll45 Посмотреть сообщение
общий словарь будет записываться в файл
Именно, записываться, не дозаписываться.
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
12.01.2022, 19:01
Цитата Сообщение от bazilio57 Посмотреть сообщение
Однако он нормально записывает данные файл, каждую запись с новой строки
ну вам уже выше сказали что и как записывает. вопрос в том что вы хотите проверять в пустом словаре который всегда перезаписывается в цикле при условии ввода 1?
Python
1
2
3
4
5
6
7
8
9
if cmd == "1":
      print ("Ввод данных")
 
      data = {}
      
      flag = True
      while flag:
          if "ID" in data:
              print ("ID существует")
ну и что что у вас в файле уже куча словарей. что бы проверять их в условии нужно хотя бы эти данные считать из файла в память и работать с ними а не на каждый if читать снова
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.01.2022, 19:01
Помогаю со студенческими работами здесь

Передача существующего объекта вместо создания нового
Есть класс Word. Он неизменяемый: все методы - константные. Учитывая это я пытаюсь создать класс таким образом чтобы вместо создания...

Проверка на наличие существующего логина
Доброе время суток, дорогие форумчане. Пишу курсовую на С#, который плохо знаю. Помогите с такой проблемой: проверки существования логина...

Проверка существующего имени в ListBox
Добрый вечер. Друзья помогайте!!! На главной форме расположен ListBox со списком наименований баз данных. На форме добавления базы...

Обновление ShellTreeView, проверка существующего файла
Не могу никак найти альтернативу ShellTreeView-ну очень удобный и не хочется ему замены, все нравится, но никак не могу избавиться от...

Проверка существующего пользователя при регистрации
Всем доброго времени. Пилю форму регистрации в БД а для этого проверяю по имени,фамилии и отчеству - есть ли пользователи с такими данными...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru