Я работаю над python и хочу прочитать файл *.ods и преобразовать его в словарь python.
Ключ будет значением первого столбца, а значение будет значением второго столбца.
Как мне это сделать? Я использовал xlrd
, но он не читает файлы *.ods.
Я работаю над python и хочу прочитать файл *.ods и преобразовать его в словарь python.
Ключ будет значением первого столбца, а значение будет значением второго столбца.
Как мне это сделать? Я использовал xlrd
, но он не читает файлы *.ods.
Некоторые доступные варианты:
pyexcel-ods: "Библиотека-оболочка для чтения, обработки и записи данных в ods." Можно установить через: pip install pyexcel-ods
. Я лично рекомендую этот пакет, так как я его использовал и он активно поддерживается.
py-odftools: "... набор инструментов для анализа, преобразование и создание файлов в формате OpenDocument стандарта ISO." Этот проект не обновлялся с конца 2007 года. Он выглядит заброшенным.
ezodf: "Пакет Python для создания файлов OpenDocumentFormat и управления ими." Устанавливается через pip install ezodf
. См. предостережение в комментариях ниже о серьезной проблеме с этим пакетом.
Хотя вы можете попросить пользователей выбрать «Файл» > «Сохранить как» (как вы, вероятно, знаете), в вашей ситуации это может оказаться бесполезным.
Вероятно, проще использовать сервис 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.
Можете ли вы сначала преобразовать .ODS в csv? Затем синтаксический анализ CSV с помощью Python довольно прост с помощью модуля csv.
Этот подход по приведенной ниже ссылке отлично работает для меня при чтении/загрузке файлов *.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)
Готово.
В Linux Journal есть отличная статья о том, как читать ods в python. Файл Ods представляет собой zip-файл juz, содержащий файл xml внутри. Вы можете проанализировать XML-файл, чтобы прочитать все ячейки.
http://www.linuxjournal.com/article/9347?page=0,2
<table:table-cell>
, но не дает ни малейшего представления о его причудливом содержании и не говорит вам, что вы должны вести очень тщательную бухгалтерию, чтобы отслеживать, к чему (строке, столбцу) принадлежит ячейка (это не записано в ячейке). атрибуты!!). Правильный разбор XML-файла НЕ является чем-то, что следует беспечно предлагать в ответ на такой вопрос. ВЫ пробовали это сами? Вы хотите, чтобы я отправил вам тестовый файл в автономном режиме?
- person John Machin; 24.01.2011
ezodf
обещает, но запущен только недавно (альфа-версия 0.2.0) и еще не обрабатывает файлы .ods, кроме открытия и сохранения файлов, и, конечно же, еще не знает о таблицах (листах), строках и ячейках. Также это только Python 3.x. - person John Machin   schedule 24.01.2011