@bond_1013
Начинающий веб-разработчик

Как добавлять информацию в файл не перезаписывая?

При записи второй раз файл просто обновляется и записывается последняя информация, как можно это исправить?
db={}
    login=login1.get()
    password=password1.get()
    if bool(set('[~!@#$%^&*()_+{}":;\']+$').intersection(password))==True and bool(set('abcdefghijklmnopqrstuvwxyz').intersection(password))==True and bool(set('ABCDEFGHIJKLMNOPQRSTUVWXYZ').intersection(password))==True and bool(set('абвгдеёжзийклмнопрстуфхцчшщъыьэюя').intersection(password))==True and bool(set('АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ').intersection(password))==True:
        h = hashlib.sha384(password.encode())
        print(password)
        db.update({login:h.hexdigest()})
        with open('D:\\database.pkl', 'wb') as f:
            pickle.dump(db,f)
        with open('D:\\database.pkl', 'rb') as f:
            print(pickle.load(f))
    else:
        mb.showerror("Ошибка","Пароль должен содержать символы Аа-Яя,Aa-Zz, спецсимволы!")
  • Вопрос задан
  • 152 просмотра
Решения вопроса 3
adugin
@adugin Куратор тега Python
Попробуйте почитать документацию:
1) Режимы открытия файлов с помощью open();
2) Использование модуля shelve, если уж вы решили идти таким путём;

Ну и код нормально перепишите, например:
subsets = [
    '[~!@#$%^&*()_+{}":;\']+$',
    'abcdefghijklmnopqrstuvwxyz',
    'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
    'абвгдеёжзийклмнопрстуфхцчшщъыьэюя',
    'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'
]

def password_is_strong(password, min_length=0):
    return len(password) >= min_length and all(map(set(password).intersection, subsets))

print(password_is_strong('Питон!=Delphi', 8))
Ответ написан
Комментировать
@immelnikoff
Изучаю БД
open('D:\\database.pkl', 'ab')
Ответ написан
Комментировать
@antonksa
Я может че не понял, но вам не кажется, что

try:
    db = pickle.load('D:\\database.pkl')
except:
    db = {}

должно быть в начале, иначе один пароль в файле это нормально, потому что вы при каждом запуске создаете пустой словарь, а потом в файл записываете словарь с одним паролем.

Ну и конечно лучше вместо picle использовать sqlite, питон нативно умеет с ним работать. Тогда можно будет искать юзера по логину через SQL запрос, а не анпиклить мегабайтные словари с десятками тысяч записей.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы