преобразование электронной таблицы в словарь Python

Я работаю над python и хочу прочитать файл *.ods и преобразовать его в словарь python.

Ключ будет значением первого столбца, а значение будет значением второго столбца.

Как мне это сделать? Я использовал xlrd, но он не читает файлы *.ods.


person Lalit Chattar    schedule 20.01.2011    source источник
comment
pypi.python.org/pypi/ezodf или udk.openoffice.org/python/python-bridge.html   -  person moinudin    schedule 20.01.2011
comment
@marcog: этот комментарий должен быть ответом.   -  person Björn Pollex    schedule 20.01.2011
comment
@Space Я просто отбросил возможность, о которой я мало читал, поэтому я не чувствую, что это полный ответ.   -  person moinudin    schedule 20.01.2011
comment
@marcog: ezodf обещает, но запущен только недавно (альфа-версия 0.2.0) и еще не обрабатывает файлы .ods, кроме открытия и сохранения файлов, и, конечно же, еще не знает о таблицах (листах), строках и ячейках. Также это только Python 3.x.   -  person John Machin    schedule 24.01.2011


Ответы (6)


Некоторые доступные варианты:

  • pyexcel-ods: "Библиотека-оболочка для чтения, обработки и записи данных в ods." Можно установить через: pip install pyexcel-ods. Я лично рекомендую этот пакет, так как я его использовал и он активно поддерживается.

  • py-odftools: "... набор инструментов для анализа, преобразование и создание файлов в формате OpenDocument стандарта ISO." Этот проект не обновлялся с конца 2007 года. Он выглядит заброшенным.

  • ezodf: "Пакет Python для создания файлов OpenDocumentFormat и управления ими." Устанавливается через pip install ezodf. См. предостережение в комментариях ниже о серьезной проблеме с этим пакетом.

person Gabriel    schedule 07.04.2015
comment
Осторожно: последний пакет (ezodf) содержит серьезную ошибку, из-за которой он автоматически возвращает неверный результат. значения ячеек: github.com/T0ha/ezodf/issues/12. Спасибо Mateusz за то, что обратил на это мое внимание. - person Gabriel; 15.05.2016
comment
github.com/pyexcel/pyexcel-ods3 говорит, что pyexcel-ods3 читает, обрабатывает и записывает данные в ods с помощью ezodf - person bugmenot123; 09.07.2019

Хотя вы можете попросить пользователей выбрать «Файл» > «Сохранить как» (как вы, вероятно, знаете), в вашей ситуации это может оказаться бесполезным.

Вероятно, проще использовать сервис libre/openoffice. Его можно запустить на сервере полностью без головы, не требуя установки или запуска X11, и это даст вам чистое нативное преобразование.

libreoffice --without-x --convert-to csv  filename.ods

Подробности см. в libreoffice --help (или openoffice --help). Это также можно обернуть в os.system(), subprocess.*() и т. д. (Примечание: используйте -convert-to в Windows.) Также обратите внимание: вы не можете уже запускать какие-либо экземпляры Офис Libre/Open/Star, включая быстрый старт.

Обновление: предыдущие версии LibreOffice использовали --headless вместо --without-x.

person fatal_error    schedule 08.04.2015
comment
Примечание: --headless требуется для автоматической работы. - person fatal_error; 09.04.2015
comment
(Мне бы очень хотелось узнать, как указать отдельный лист.) - person fatal_error; 09.04.2015
comment
Если вы даже не хотите связывать библиотеки X11, вот как сделать безголовую сборку: wiki.documentfoundation .org/Разработка/HeadlessBuild - person fatal_error; 09.04.2015
comment
В Libreoffice 4.4 и более поздних версиях --headless теперь --without-x. (окна: -без-х) - person fatal_error; 09.04.2015

Можете ли вы сначала преобразовать .ODS в csv? Затем синтаксический анализ CSV с помощью Python довольно прост с помощью модуля csv.

person phildrip    schedule 20.01.2011
comment
спасибо, но, насколько я знаю, единственный способ конвертировать ods в cvs - это служба открытого офиса. Но я не хочу его использовать. могу ли я напрямую преобразовать его в словарь - person Lalit Chattar; 20.01.2011

Проверьте py-odftools.

person eumiro    schedule 20.01.2011

Этот подход по приведенной ниже ссылке отлично работает для меня при чтении/загрузке файлов *.ods в фреймворк данных python. Вы можете выбрать загрузку sheet index или sheet name.

Подсмотрел мое решение из этого проекта: https://pypi.org/project/pandas-ods-reader/

Возможно, вам сначала потребуется установить эти зависимости: ezodf,lxml и pandas, прежде чем продолжить.

pip install pandas_ods_reader

from pandas_ods_reader import read_ods

Затем:

filepath = "path/to/your/file.ods"

Выполнение загрузки листов на основе индексов (на основе индекса 1)

sheet_idx = 1
df = read_ods(filepath, sheet_idx)

Выполнение загрузки листов на основе имен листов

sheet_name = "sales_year_1"

df = read_ods(filepath, sheet_name)

Готово.

person Laenka-Oss    schedule 14.09.2019

В Linux Journal есть отличная статья о том, как читать ods в python. Файл Ods представляет собой zip-файл juz, содержащий файл xml внутри. Вы можете проанализировать XML-файл, чтобы прочитать все ячейки.

http://www.linuxjournal.com/article/9347?page=0,2

person vi4m    schedule 20.01.2011
comment
как читать ods в python, доходит только до суммирования подмножества возможных интересных тегов, например. он упоминает <table:table-cell>, но не дает ни малейшего представления о его причудливом содержании и не говорит вам, что вы должны вести очень тщательную бухгалтерию, чтобы отслеживать, к чему (строке, столбцу) принадлежит ячейка (это не записано в ячейке). атрибуты!!). Правильный разбор XML-файла НЕ является чем-то, что следует беспечно предлагать в ответ на такой вопрос. ВЫ пробовали это сами? Вы хотите, чтобы я отправил вам тестовый файл в автономном режиме? - person John Machin; 24.01.2011