Могу ли я получить вашу помощь в устранении проблемы с дескриптором файла в пакете Python openpyxl версии 3.0.7? Если для параметра load_workbook read_only установлено значение False, этого не происходит. Это происходит только в том случае, если установлено значение True. Если вы вызовете эти функции load_workbook и закроете несколько раз (одного и того же файла), это в конечном итоге произойдет. Я считаю, что сузил исходный код, открывая дескриптор файла. Проблема в том, что его не удаляют. Исключение выдается при вызове Shutil.move(source_file, target_file) после многократного открытия/закрытия одной и той же книги. Я постараюсь избежать этого, открывая и закрывая книгу один раз, но мне нужно будет построить структуру данных для хранения всего, поскольку в книге 23 листа. Но это похоже на проблему, несмотря ни на что. Если я установлю read_only=False, производительность будет ужасной! Таким образом, работа займет примерно на час больше.
import openpyxl # openpyxl 3.0.7
# repeat open/close multiple times
wb_source = openpyxl.load_workbook(file_path, read_only=True)
ws_source = wb_source[worksheet_name]
for row in ws_source.rows:
for cell in # cells
# ...
wb_source.close()
shutil.move(file_path, file_path_archive)
Вот исключение:
Traceback (most recent call last):
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0\lib\shutil.py", line 566, in move
os.rename(src, real_dst)
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\Python\\...file.xlsx' -> 'C:\\Python\\...file.xlsx'
.\venv\Lib\site-packages\openpyxl\reader\excel.py
# Python stdlib imports
from zipfile import ZipFile, ZIP_DEFLATED, BadZipfile
from sys import exc_info
from io import BytesIO
import os.path
import warnings
# ...
if self.read_only:
ws = ReadOnlyWorksheet(self.wb, sheet.name, rel.target, self.shared_strings)
ws.sheet_state = sheet.state
self.wb._sheets.append(ws)
continue
else:
fh = self.archive.open(rel.target)
ws = self.wb.create_sheet(sheet.name)
ws._rels = rels
ws_parser = WorksheetReader(ws, fh, self.shared_strings, self.data_only)
ws_parser.bind_all()
.\venv\Lib\site-packages\openpyxl\packaging\manifest.py
mimetypes = MimeTypes()
C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0\Lib\mimetypes.py
class MimeTypes:
def init(files=None):
global suffix_map, types_map, encodings_map, common_types
global inited, _db
inited = True # so that MimeTypes.__init__() doesn't call us again
if files is None or _db is None:
db = MimeTypes()
if _winreg:
db.read_windows_registry()
if files is None:
files = knownfiles
else:
files = knownfiles + list(files)
else:
db = _db
for file in files:
if os.path.isfile(file):
db.read(file) #
Подробнее здесь: https://stackoverflow.com/questions/781 ... kbook-with
Почему после открытия и закрытия книги с файлом xlsx с помощью openpyxl с read_only=True появляется дескриптор файла? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение