Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 6, 2017 20:09:07

ewro
Зарегистрирован: 2017-11-03
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

Открыть создать файлы Excel

Подскажите конструкцию для openpyxl.
Требуется открыть один файл Excel. Считать из него пару цифирь. Потом открыть другой файл Excel. Считать из него данные и записать в третий файл Excel.
Как правильно открывать, закрывать?

Офлайн

#2 Ноя. 7, 2017 01:53:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Открыть создать файлы Excel

Документация с примерами
http://openpyxl.readthedocs.io/en/default/



Офлайн

#3 Ноя. 7, 2017 05:44:09

ewro
Зарегистрирован: 2017-11-03
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

Открыть создать файлы Excel

Про открытие нескольких файлов там нету ничего…

Офлайн

#4 Ноя. 7, 2017 05:54:27

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Открыть создать файлы Excel

ewro

Вы же наверняка знаете, как люди занимаются сексом? Как то так “тык-тык-тык”, правда ведь? Одного тыка явно мало. Вот с файлами так же.



Офлайн

#5 Ноя. 7, 2017 06:35:17

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Открыть создать файлы Excel

ewro
Про открытие нескольких файлов там нету ничего…
Так ты открывай их один за другим, потом работай с ними всеми, а потом закрывай один за другим.



Офлайн

#6 Ноя. 7, 2017 09:22:36

ewro
Зарегистрирован: 2017-11-03
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

Открыть создать файлы Excel

Спасибо за ответы.
Понимаю, что закрывать надо. А как?
Для xlrd нашел:

 book.release_resources()
del book
А для openpyxl не найду никак… Щас одену огромные очки - буду искать. Должно же быть.

Офлайн

#7 Ноя. 7, 2017 10:29:00

ewro
Зарегистрирован: 2017-11-03
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

Открыть создать файлы Excel

Понял так, что это проблема библиотеки openpyxl.
Народ костыли какие-то сооружает, но как-то не очень.
Придется в данном случае работать с xlrd.

Офлайн

#8 Ноя. 7, 2017 10:36:48

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Открыть создать файлы Excel

ewro
А для openpyxl не найду никак
Там автоматически происходит это. Она открывает ZipFile() а потом внутри же и закрывает его.
https://bitbucket.org/openpyxl/openpyxl/src/f79ce0a7546076be434ee1d41c2ac52e1e738f79/openpyxl/writer/excel.py?at=default&fileviewer=file-view-default#excel.py-249
Вот смотрю на их код, явно неправильно сделано: закрывать надо там же, где и открываешь; а они открывают снаружи, а закрывают где-то внутри объекта. Да и вообще ZipFile() поддерживает работу через with, даже закрывать ничего не надо, само закроется с гарантией.

ewro
Придется в данном случае работать с xlrd.
Твоя задача никак не относится к модулям для работы с xls-файлами. Ты не можешь сделать правильный алгоритм, который бы правильно использовал эти модули. Модули не должны открывать по несколько файлов, их задача - открыть один файл правильно, работать с ним полноценно и сохранить его потом правильно.



Отредактировано py.user.next (Ноя. 7, 2017 10:48:53)

Офлайн

#9 Ноя. 7, 2017 11:05:02

ewro
Зарегистрирован: 2017-11-03
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

Открыть создать файлы Excel

Задача у меня в принципе простая. Линейная. Из шаблона Excel файла взять номера ячеек. Теперь его можно закрыть. Открыть другой для поиска. Записать в третий результат поиска.
Пробовал (скорее всего не правильно, т.к. пока не очень понимаю, что там происходит) ZipFile() - пока не получается.
В принципе вопрос такой - стоит ли тогда заморачиваться с openpyxl если в xlrd вопрос решается двумя строчками? В Питоне (да в принципе вообще в программировании) я не просто новичок, а очень новичок.
Если не трудно - покажите как правильно закрыть.

Отредактировано ewro (Ноя. 7, 2017 11:08:07)

Офлайн

#10 Ноя. 7, 2017 11:20:33

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Открыть создать файлы Excel

ewro
если в xlrd вопрос решается двумя строчками?
Модуль xlrd не пишет в файлы, только читает. Для записи используется xlwt. Они как бы парой ставятся и потом используются по отдельности. А openpyxl может и читать, и писать - то есть один модуль вместо двух.

ewro
Если не трудно - покажите как правильно закрыть.
В openpyxl он сам закрывает файл после записи, там в примерах как раз нигде закрытия нет из-за этого. В исходниках это видно. Что я советовал - это общий подход, где если было открытие чего-то, то должно быть и закрытие, потому что без закрытия могут пропасть данные, так как данные не всегда пишутся сразу, а могут откладываться для записи в другое время (отложенной записи). Если у тебя данные отложены, то при резком выходе из программы они могут пропасть, так и не записавшись.

ewro
Задача у меня в принципе простая. Линейная. Из шаблона Excel файла взять номера ячеек. Теперь его можно закрыть. Открыть другой для поиска. Записать в третий результат поиска.
Можешь так и делать. Открыл, прочитал в память, закрыл. Дальше из памяти используешь данные, файл уже закрыт, с ним работы не ведётся. С файлом записи точно так же - открыл, записал из памяти, закрыл.

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



Отредактировано py.user.next (Ноя. 7, 2017 11:24:52)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version