openpyxl не закрывает файл
Простой код для примера:
import openpyxl
path = *путь к файлу*
wb = openpyxl.load_workbook(path)
wb.close()
Если после этого открываю файл в экселе, то эксель не дает сохранить никакие изменения в файле из-за конфликта доступа.
Код запускаю в idle. Возможность редактировать файл в экселе возвращается, только если закрыть idle.
Есть ли возможность с этим как-то бороться?
Если у кого-то та же проблема, по итогу помог вариант, предложенный CrazyElf:
import openpyxl
import gc
path = *путь к файлу*
wb = openpyxl.load_workbook(path)
gc.collect()
wb.close()
Ответы (2 шт):
Вероятнее всего это происходит потому что, openpyxl открывает несколько файловых дескрипторов, но при этом built-in функция _get_source()
возвращает лишь один для закрытия.
Загружайте файл через память и используйте режим read_only
.
import openpyxl
path = *путь к файлу*
memoryCopy = None
with open(path, "rb") as f:
memoryCopy = io.BytesIO(f.read())
wb = load_workbook(memoryCopy, read_only=True)
Вам может помочь удаление переменной wb
из памяти и принудительная сборка мусора после этого:
import gc
...
wb.close()
del wb
gc.collect()