Чтение из файла Excel, открытого в Python - PullRequest
0 голосов
/ 26 июня 2019

У меня есть скрипт, который извлекает данные из файлов Excel каждые несколько часов. Однако, если один из этих файлов Excel открыт, я все же хочу иметь возможность читать из него.

В python (openpyxl) я получаю ошибку прав доступа при попытке сделать это.

Ниже я попробовал ниже. Я думал, что смогу поймать исключение и создать временную версию файла, из которого я смогу прочитать.

try:
    read_from = load_workbook(fileName)
except:
    tempFileName = "directory\\temp " + fileName + ".xlsx"
    open(tempFileName, 'wb').write(open(fileName, 'rb').read())
    read_from = load_workbook(tempFileName)

Однако я получаю следующую ошибку даже с этим:

----> 6         open(tempFileName, 'wb').write(open(fileName, 'rb').read())
  7         read_from = load_workbook(tempFileName)
  8     read_sheet = read_from.active

PermissionError: [Errno 13] Permission denied: 'directory\\testfile.xlsx'

РЕДАКТИРОВАТЬ: у меня есть текущий обходной путь, как показано ниже

создание временной копии файла с помощью командной строки, а затем удаление временного файла, похоже, работает нормально.

try:
    read_from = load_workbook(fileName)
    delTempFileFlag = False
except:
    print("file: ",item,"is open, so cannot be accessed")
    tempFileName = "directory\\temp " + fileName + ".xlsx"
    command = "xcopy \"" + fileName + "\" " + "\"" + tempFileName + "*\""
    os.system(command)
    print("Temporary copy of file created to work with")
    read_from = load_workbook(tempFileName)
    delTempFileFlag = True
...
...
if delTempFileFlag == True:
    os.remove(tempFileName)
    delTempFileFlag = False

1 Ответ

0 голосов
/ 26 июня 2019

Я только что написал ваш код как

fh_in = open(fileName, 'rb')
fh_out = open(tempFileName, 'wb')

f_in_content = fh_in.read()
fh_out.write(f_in_content)

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

Чтение файла работает нормально, но когда я попытался записать в целевой файл, это не удалось с PermissionError.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...