Итак, у меня возникла проблема, когда я пытаюсь записать словарь в двоичный файл, и ничего не происходит.Очень странно;нет сообщения об ошибке, ничего.Это как программа пропускает код, а именно этот код
with open("database.dat", "wb") as handle:
pickle.dump(d, handle)
handle.close()
У меня нет проблем с загрузкой из этого файла database.dat, если он существует, но, похоже, этот код не создает новый двоичный файл, если онне существует и не перезаписывает файл, если он существует.У меня никогда не было этой проблемы, поэтому я озадачен ...
Чтобы дать представление о том, где это подходит, вот эта функция:
import pickle
def initialise_database(directory, file_name):
try:
with open("database.dat", "rb") as handle:
d = pickle.load(handle) # THIS WORKS PERFECTLY
handle.close()
return d
except FileNotFoundError:
return update_database(directory, file_name)
def update_database(directory, file_name):
import xlrd, os
# Change directory
os.chdir(directory)
try:
wb = xlrd.open_workbook(file_name)
sheet = wb.sheet_by_name("FUNDS")
rows, cols = sheet.nrows, sheet.ncols
d = {}
for i in range(rows - 1):
if sheet.cell_value(i + 1, 0) != "":
charity = cap(sheet.cell_value(i + 1, 0))
area_of_work = []
org = []
funding = 0
for x in range(cols):
if sheet.cell_value(0, x) == "Area of work":
if sheet.cell_value(i + 1, x) != "":
area_of_work.append(cap(sheet.cell_value(i + 1, x)))
else:
pass
elif sheet.cell_value(0, x) == "Organisation funded":
if sheet.cell_value(i + 1, x) != "":
org.append(cap(sheet.cell_value(i + 1, x)))
else:
pass
elif sheet.cell_value(0, x) == "How much funding provided":
funding = (str_to_int(sheet.cell_value(i + 1, x)))
if funding is False:
print("\nCharity " + str(sheet.cell_value(i + 1, 0)) + ", number " + str(i + 2) + " has funding of value: "+ str(funding) + ", which is not compatible. Please find it and fix it in the the excel file. Then try again")
return False
# Adds entry to dictionary
d[charity] = [area_of_work, org, funding]
else:
pass
# After the loop has finished, it should write the entire dictionary to a newly created file!
with open("database.dat", "wb") as handle:
pickle.dump(d, handle)
handle.close()
return d
except FileNotFoundError:
print("File could not be found.")
print("Program terminating.\n\nPress the enter key to exit.")
Я посмотрелна другие вопросы, и никто, кажется, не затрагивает проблему, с которой я сталкиваюсь здесь.Буду очень признателен за любую помощь в том, как это исправить!
Редактировать: Я также хотел бы добавить, что когда я запускаю код и выполняю
print(initialise_database( #my_directory, #my_file )
Он распечатывает мою базу данныхЭто означает, что вызывается функция update (), так как такого файла database.dat нет нигде
В качестве доказательства того, что файл не отображается, приведен скриншот.Это после запуска full_script (откуда взят этот код).