Форум сайта python.su
0
Подскажите конструкцию для openpyxl.
Требуется открыть один файл Excel. Считать из него пару цифирь. Потом открыть другой файл Excel. Считать из него данные и записать в третий файл Excel.
Как правильно открывать, закрывать?
Офлайн
857
Документация с примерами
http://openpyxl.readthedocs.io/en/default/
Офлайн
0
Про открытие нескольких файлов там нету ничего…
Офлайн
568
ewro
Вы же наверняка знаете, как люди занимаются сексом? Как то так “тык-тык-тык”, правда ведь? Одного тыка явно мало. Вот с файлами так же.
Офлайн
857
ewroТак ты открывай их один за другим, потом работай с ними всеми, а потом закрывай один за другим.
Про открытие нескольких файлов там нету ничего…
Офлайн
0
Спасибо за ответы.
Понимаю, что закрывать надо. А как?
Для xlrd нашел:
book.release_resources() del book
Офлайн
0
Понял так, что это проблема библиотеки openpyxl.
Народ костыли какие-то сооружает, но как-то не очень.
Придется в данном случае работать с xlrd.
Офлайн
857
ewroТам автоматически происходит это. Она открывает ZipFile() а потом внутри же и закрывает его.
А для openpyxl не найду никак
ewroТвоя задача никак не относится к модулям для работы с xls-файлами. Ты не можешь сделать правильный алгоритм, который бы правильно использовал эти модули. Модули не должны открывать по несколько файлов, их задача - открыть один файл правильно, работать с ним полноценно и сохранить его потом правильно.
Придется в данном случае работать с xlrd.
Отредактировано py.user.next (Ноя. 7, 2017 10:48:53)
Офлайн
0
Задача у меня в принципе простая. Линейная. Из шаблона Excel файла взять номера ячеек. Теперь его можно закрыть. Открыть другой для поиска. Записать в третий результат поиска.
Пробовал (скорее всего не правильно, т.к. пока не очень понимаю, что там происходит) ZipFile() - пока не получается.
В принципе вопрос такой - стоит ли тогда заморачиваться с openpyxl если в xlrd вопрос решается двумя строчками? В Питоне (да в принципе вообще в программировании) я не просто новичок, а очень новичок.
Если не трудно - покажите как правильно закрыть.
Отредактировано ewro (Ноя. 7, 2017 11:08:07)
Офлайн
857
ewroМодуль xlrd не пишет в файлы, только читает. Для записи используется xlwt. Они как бы парой ставятся и потом используются по отдельности. А openpyxl может и читать, и писать - то есть один модуль вместо двух.
если в xlrd вопрос решается двумя строчками?
ewroВ openpyxl он сам закрывает файл после записи, там в примерах как раз нигде закрытия нет из-за этого. В исходниках это видно. Что я советовал - это общий подход, где если было открытие чего-то, то должно быть и закрытие, потому что без закрытия могут пропасть данные, так как данные не всегда пишутся сразу, а могут откладываться для записи в другое время (отложенной записи). Если у тебя данные отложены, то при резком выходе из программы они могут пропасть, так и не записавшись.
Если не трудно - покажите как правильно закрыть.
ewroМожешь так и делать. Открыл, прочитал в память, закрыл. Дальше из памяти используешь данные, файл уже закрыт, с ним работы не ведётся. С файлом записи точно так же - открыл, записал из памяти, закрыл.
Задача у меня в принципе простая. Линейная. Из шаблона Excel файла взять номера ячеек. Теперь его можно закрыть. Открыть другой для поиска. Записать в третий результат поиска.
Отредактировано py.user.next (Ноя. 7, 2017 11:24:52)
Офлайн