电子表格到python字典的转换

电子表格到python字典的转换,python,ods,Python,Ods,我正在使用python,我想读取一个*.ods文件并将其转换为python字典 该键将是第一列值,该值将是第二列值 我怎么做?我使用了xlrd,但它不读取*.ods文件。能否先将.ods转换为csv文件?然后,使用Python解析CSV非常容易。检查。Linux杂志上有一篇关于如何用Python阅读ods的文章。 Ods文件是一个包含xml文件的JUZIP文件。您可以通过解析xml文件来读取所有单元格 一些可用选项: :“以ods格式读取、操作和写入数据的包装器库。”可通过以下方式安装:pip

我正在使用python,我想读取一个*.ods文件并将其转换为python字典

该键将是第一列值,该值将是第二列值


我怎么做?我使用了
xlrd
,但它不读取*.ods文件。

能否先将.ods转换为csv文件?然后,使用Python解析CSV非常容易。

检查。

Linux杂志上有一篇关于如何用Python阅读ods的文章。 Ods文件是一个包含xml文件的JUZIP文件。您可以通过解析xml文件来读取所有单元格


一些可用选项:

  • :“以ods格式读取、操作和写入数据的包装器库。”可通过以下方式安装:
    pip install pyexcel ods
    。我个人推荐这个软件包,因为我已经使用过它,并且正在积极维护它

  • :“…用于以ISO标准OpenDocument格式分析、转换和创建文件的工具集合。” 该项目自2007年底以来一直未更新。它看起来被遗弃了

  • :“用于创建/操作OpenDocumentFormat文件的Python包。”可通过
    pip install ezodf
    安装。有关此软件包的严重问题,请参阅下面评论中的警告


尽管您可以要求用户将文件>另存为(您可能知道),但这在您的情况下可能没有用处

使用libre/openoffice服务可能更容易。它可以在服务器上完全无头运行,而无需安装或运行X11,这将为您提供干净的本机转换

libreoffice --without-x --convert-to csv  filename.ods
有关详细信息,请查看libreoffice--help(或openoffice--help)。这也可以包装在os.system()、SUBSPROCESS.*()等中(注意:在Windows上使用-convert to。)另外注意:您不能已经在运行Libre/Open/Star office的任何实例,包括quickstarter


更新:以前版本的LibreOffice使用的是无头而不是无x。

下面链接中的这种方法对于我将*.ods文件读取/加载到python数据帧中非常有效。 您可以选择按加载
图纸索引
图纸名称

从该项目中查看我的解决方案:

您可能首先需要安装这些依赖项:
ezodf、lxml
pandas
,然后才能继续

pip install pandas_ods_reader

from pandas_ods_reader import read_ods
然后:

根据索引加载板材(基于索引1)

根据图纸名称加载图纸

sheet_name = "sales_year_1"

df = read_ods(filepath, sheet_name)

完成。

或@marcog:这条评论应该是一个答案。@Space我刚刚放弃了一个可能性,我没有读太多,所以我觉得这不是一个完整的答案。@marcog:
ezodf
有承诺,但最近才开始(版本0.2.0 alpha),除了打开和保存文件外,还没有处理.ods文件,当然,他还不知道表格、行和单元格。另外,它只是Python3.x。谢谢,但正如我所知,将ods转换为cvs的唯一方法是开放式office服务。但是我不想用它。我可以直接把它转换成字典吗?“how to read ods in python”只总结了可能感兴趣的标记的子集,例如,它提到了
,但对其奇怪的内容没有任何线索,也没有告诉您必须非常仔细地记录单元格所属的(行、列)内容(它没有记录在单元格属性中!!)。正确解析XML文件不是回答这样一个问题时应该愉快地建议的事情。您自己尝试过吗?是否希望我脱机向您发送测试文件?注意:--自动操作需要无头。(我很想知道如何指定单个工作表。)如果您甚至不想链接X11库,下面介绍如何进行无头构建:在Libreoffice 4.4及更高版本中,-headless现在是--without-x.(windows:-without-x)注意:最后一个包()包含一个严重的错误,导致它以静默方式返回错误的单元格值:。感谢您让我注意到它。说pyexcel-ods3使用ezodf读取、处理和写入ods格式的数据
sheet_idx = 1
df = read_ods(filepath, sheet_idx)
sheet_name = "sales_year_1"

df = read_ods(filepath, sheet_name)