【问题标题】:spreadsheet to python dictionary conversion电子表格到 python 字典的转换
【发布时间】:2011-06-12 07:33:50
【问题描述】:

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

键是第一列的值,值是第二列的值。

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

【问题讨论】:

  • @marcog:这条评论应该是一个答案。
  • @Space 我只是放弃了一个我没有真正阅读过的可能性,所以我觉得这不是一个完整的答案。
  • @marcog: ezodf 有承诺,但最近才开始(版本 0.2.0 alpha),除了打开和保存文件之外,不处理 .ods 文件,当然不知道表(工作表),行和单元格呢。它也仅适用于 Python 3.x。

标签: python ods


【解决方案1】:

您可以先将 .ODS 转换为 csv 吗?然后使用 csv 模块使用 Python 解析 CSV 非常简单。

【讨论】:

  • 谢谢,但据我所知,将 ods 转换为 cvs 的唯一方法是开放式办公服务。但我不想使用它。可以直接转成字典吗
【解决方案2】:

检查py-odftools

【讨论】:

    【解决方案3】:

    Linux Journal 上有一篇很棒的文章如何在 python 中阅读 ods。 Ods 文件是一个包含 xml 文件的 juz zip 文件。您可以解析 xml 文件来读取所有单元格。

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

    【讨论】:

    • "如何在 python 中读取 ods" 仅总结了可能有趣标签的子集,例如它提到了<table:table-cell>,但对它的奇怪内容一无所知,也没有告诉你必须非常仔细地记账以跟踪单元格属于什么(行、列)(它没有记录在单元格属性!!)。正确解析 XML 文件并不是在回答这样一个问题时应该愉快地建议的事情。你自己试过吗?要我离线给你发一份测试文件吗?
    【解决方案4】:

    一些可用的选项:

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

    • py-odftools:“...用于分析、转换和创建 ISO 标准 OpenDocument 格式文件的工具集合。” 这个项目自 2007 年底以来就没有更新过。它看起来已经被废弃了。

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

    【讨论】:

    【解决方案5】:

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

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

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

    查看 libreoffice --help(或 openoffice --help)了解详情。这也可以包含在 os.system()、subprocess.*() 等中(注意:在 Windows 上使用 -convert-to。)另请注意:您不能已经在运行 any 的实例Libre/Open/Star office,包括快速入门。

    更新:以前版本的 LibreOffice 使用 --headless 而不是 --without-x。

    【讨论】:

    • 注意:自动化操作需要--headless。
    • (我很想知道如何指定单个工作表。)
    • 如果您甚至不想链接 X11 库,以下是如何进行无头构建:wiki.documentfoundation.org/Development/HeadlessBuild
    • 在 Libreoffice 4.4 及更高版本中,--headless 现在是--without-x。 (windows: -without-x)
    【解决方案6】:

    下面链接中的这种方法非常适合我将 *.ods 文件读取/加载到 python 数据帧中。 您可以选择加载方式 sheet index 或通过 sheet name.

    从这个项目中窥探我的解决方案:https://pypi.org/project/pandas-ods-reader/

    在继续之前,您可能首先需要安装这些依赖项:ezodf,lxmlpandas

    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)
    

    完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 2019-01-10
      • 1970-01-01
      相关资源
      最近更新 更多