Ну для начала я бы посоветовал использовать json вместо pickle. pickle даёт бинарную строку, которая нечитаема человеком. Кроме того, как написано большими красными буквами в доках на pickle, он имеет уязвимости, так что ни в коем случае нельзя передавать через него недоверенные данные.
В коде много кривых вызовов не по делу.
ff = open(file_name, 'rb')
baza = {ff}
Что сиё должно означать вообще? Ты создал множество из одного элемента - файлового объекта ff. Или ты ожидал, что это магически превратит файл в словарь?
Как правильно:
import json
#оператор with обеспечит закрытие файла, как только управление покинет тело оператора
#явное указание кодировки подстрахует от получения "кракозябр" на выходе
#Кодировка utf-8 позволит использовать символы любых алфавитов.
with open('Список.txt', 'rt', encoding='utf-8') as ff:
baza = json.load(ff)
Далее.
baza.update({users_name.title():users_numbe})
Зачем? Почему не написать просто:
baza[users_name.title()] = users_numbe
Далее.
f.close
Ты взял адрес метода close у объекта f. Ты НЕ вызвал метод close. Чтобы метод вызвать, нужно указать круглые скобки. Впрочем, если используешь with, то он вызовет close() за тебя.
Так что:
with open('Список.txt', 'wt', encoding='utf-8') as ff:
json.dump(
baza, #что записываем
ff, #куда
ensure_ascii=False, #не ASCII-строки пишем как есть, без кодирования
indent=" ", #сделать отступ, не писать всё в одну строку
sort_keys=True, #отсортировать ключи по алфавиту
)
Остальное примерно так.