Неверный режим или имя файла при использовании openpyxl в python 2.7

Я пытаюсь что-то написать в существующей книге с помощью инструментов openpyxl.

Но я получаю Err № 22 и не знаю, почему.

Мой скрипт выглядит так:

#Reading & writing to a workbook

from openpyxl import Workbook
from openpyxl.compat import range
from openpyxl.cell import get_column_letter

wb = Workbook()

dest_filename = 'J:\Python_Script\book2.xls'

ws = wb.active

ws.title = "Tabelle 1"

for col_idx in range(1, 40):
     col = get_column_letter(col_idx)
     for row in range(1, 600):
         ws.cell('%s%s'%(col, row)).value = '%s%s' % (col, row)

ws = wb.create_sheet()

ws.title = 'Pi'

ws['F5'] = 3.14

wb.save(filename = dest_filename)

и это вывод консоли с сообщением об ошибке, которое я получил:

//------------------

Traceback (most recent call last):
File "J:/Python_Script/xlsx_test.py", line 26, in <module>
wb.save(filename = dest_filename)
File "build\bdist.win32\egg\openpyxl\workbook\workbook.py", line 281, in save
save_workbook(self, filename)
File "build\bdist.win32\egg\openpyxl\writer\excel.py", line 214, in save_workbook
writer.save(filename)
File "build\bdist.win32\egg\openpyxl\writer\excel.py", line 196, in save
archive = ZipFile(filename, 'w', ZIP_DEFLATED)
File "C:\Python27\lib\zipfile.py", line 752, in __init__
self.fp = open(file, modeDict[mode])
IOError: [Errno 22] invalid mode ('wb') or   filename: 'J:\\Python_Script\x08ook2.xls'

//----------------------

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

Благодарность

РЕДАКТИРОВАТЬ:

Решено. Просто пришлось изменить путь с \ на /.


person HightronicDesign    schedule 09.03.2015    source источник
comment
отредактированная грамматика для ясности и измененные теги для большей наглядности   -  person Our Man in Bananas    schedule 09.03.2015
comment
Клиентский код почти никогда не должен использовать get_column_letter. Я предполагаю, что это здесь только для иллюстрации. Вы должны почти всегда использовать ws.append() или ws[] при создании ячеек.   -  person Charlie Clark    schedule 09.03.2015


Ответы (1)


В Python \ используется в строках для экранирования символов. Вы можете избежать этого, используя «необработанные строки» с префиксом «r». Так что r'J:\Python_Script\book2.xls' должно работать.

Однако при работе с путями чаще всего используется модуль os.path, чтобы убедиться, что это правильно.

dest_filename = os.path.join("J:", "Python_Script", "book2.xlsx")

Это бесценно при написании переносимого кода.

person Charlie Clark    schedule 09.03.2015