【问题标题】:How do i extract specific lines of data from a huge Excel sheet using Python?如何使用 Python 从巨大的 Excel 工作表中提取特定的数据行?
【发布时间】:2010-07-13 20:06:55
【问题描述】:

我需要获取其中包含某些关键字(名称)的特定数据行并将它们写入另一个文件。起始文件是一个 1.5 GB 的 Excel 文件。我不能只是打开它并将其另存为其他格式。我应该如何使用 python 处理这个?

【问题讨论】:

  • 问题中的详细信息也值得赞赏。
  • 您提到可以在EditPad Lite中打开它;数据是什么样的(例如二进制数据、XML、CSV、制表符分隔等)?如果您不知道,您可以编辑您的问题并将示例粘贴到那里。
  • 这是可读的单词,由 // 分隔,我相信会有不同的列。像约翰 // Doe // 男性 // 白种人 //
  • 如@tgray 所问,发布样本(编辑您的问题!)。
  • 复制文件的前四行,将它们粘贴到您的问题中,选择粘贴的行,然后按 Ctrl-K 以有用的方式格式化它们。

标签: python


【解决方案1】:

我是 xlrd 的作者和维护者。请编辑您的问题以提供以下问题的答案。 [SO cmets 中的此类内容非常难以阅读]

  1. 文件有多大(以 MB 为单位)? [“巨大”不是有用的答案]

  2. 什么软件创建了这个文件?

  3. 您的计算机上有多少内存?

  4. 当您尝试使用 Excel 打开文件时,究竟会发生什么?请解释“我可以部分打开它”。

  5. 当您尝试使用xlrd.open_workbook 使用您的脚本打开“C:\bigfile.xls”时,您收到的错误消息究竟是什么?包括您运行的脚本、完整的回溯和错误消息

  6. 什么操作系统,什么版本的Python,什么版本的xlrd?

  7. 您知道文件中有多少工作表吗?

【讨论】:

  • 1.该文件为 1,500,000 KB 2。我相信 excel。我没有自己创建文件。 3. 不够。它经常结冰。 4. Excel 提示无法打开 etire 文件,部分数据会丢失。所以我可以打开文件的第一部分,而不是整个记录 5。它说:名为的文件不存在 6。Python 2.6 窗口,我不确定 xlrd 7。只有一个工作表
  • 关于 Q3:你到底有多少 MB 内存?关于 Q5:(1)请确保您输入了完整正确的文件路径;请给出确切的错误信息和回溯(使用复制/粘贴) (2) 请告诉我们文件前8个字节的内容,通过python -c "print repr(open('yourfile.xls', 'rb').read(8))"获得
【解决方案2】:

在我看来,您有一个使用 Excel 2007 创建的电子表格,而您只有 Excel 2003。

Excel 2007 可以创建 1,048,576 行 x 16,384 列的工作表,而 Excel 2003 只能使用 65,536 行 x 256 列的工作表。因此,您无法在 Excel 中打开整个工作表。

如果工作簿的尺寸更大,那么xlrd 应该可以读取文件,但如果文件实际上大于您计算机中的内存量(我认为这里不是这种情况因为您可以使用 EditPad lite 打开文件),那么您将不得不找到一种替代方法,因为xlrd 会将整个工作簿读入内存。

假设第一种情况:

import xlrd

wb_path = r'c:\bigfile.xls'
output_path = r'c:\output.txt'

wb = xlrd.open(wb_path)
ws = wb.sheets()[0]  # assuming you want to work with the first sheet in the workbook

with open(output_path, 'w') as output_file:
    for i in xrange(ws.nrows):
        row = [cell.value for cell in ws.row(i)]

        # ... replace the following if statement with your own conditions ...
        if row[0] == u'interesting':
            output_file.write('\t'.join(row) + '\r\n')

这将为您提供一个以制表符分隔的输出文件,该文件应在 Excel 中打开。

编辑:

根据您对John Machin 的问题 5 的回答,确保在您的 C 盘根目录中有一个名为“bigfile.xls”的文件。如果文件不存在,请将wb_path 更改为您要打开的文件的正确位置。

【讨论】:

  • 要使 Excel 文件有效地具有超过 256 列或 65536 行,它必须由 Excel 2007 或 2010 以 XLSX 格式或 XLSB 格式创建。 Excel 2003 不会打开任何 XLSX 或 XLSB 文件(除非可能已添加了兼容性工具包)。除非 OP 提供了一些准确的信息,否则我们目前所拥有的只是空洞的猜测。
  • @John Machin,确实如此。虽然我似乎记得 Excel 2007/2010 可以将超过 65536 行的工作表保存为 XLS 文件并重新打开它而不会丢失任何数据。由于我即将退出这一天,我想我会在离开前提供我的猜测,并根据 OP 所做的 cmet 做出有根据的猜测。
  • 它说有语法错误是这一行与 open(output_path, 'w') as output_file:
  • @novak,如果您使用的是 python 2.5,则需要包含另一个导入语句:from __future__ import with_statement
  • @tgray: """Excel 2007/2010 可以将超过 65536 行的工作表保存为 XLS 文件并重新打开它而不会丢失任何数据。""" -- 错误 超过 65536 行的 XLS 格式只是没有打开;行索引保存在 16 位无符号整数中。
【解决方案3】:

我没用过,但xlrd 看起来可以很好地读取 Excel 数据。

【讨论】:

  • 我很难使用 xlrd 我无法打开我的文件。
  • 那么请在您的问题中发布您迄今为止尝试过但没有奏效的内容。你甚至不能在 Excel 中打开文件吗?
  • NO 文件太大,无法在 Excel 中完全打开。我可以部分打开它。我有这个程序: from xlrd import open_workbook,cellname book = open_workbook('C:\\bigfile.xls') sheet = book.sheet_by_index(0) print sheet.name print sheet.nrows print sheet.ncols for row_index in range( sheet.nrows): for col_index in range(sheet.ncols): print cellname(row_index,col_index),'-', print sheet.cell(row_index,col_index).value
  • 尝试在记事本或类似工具中查看文件,以确保它是一个实际的 Excel 文件,而不是名为 .xls[x] 的 CSV 文件,它会混淆 Excel。
  • 所以问题是我可以制作一个 sample.xls 文件并将其命名为 C:\\sample.xls,它可以正常打开并列出数据。但是当我想使用真正巨大的实际数据文件 C:\\bigfile.xls 时说该文件不存在。真的很郁闷
【解决方案4】:

您的问题是您使用的是 Excel 2003 .. 您需要使用更新的版本才能读取此文件。 2003 不会打开大于 1M 行的文件。

【讨论】:

  • 你怎么知道这是问题所在?在仔细筛选了 cmets 等之后,我看不到任何关于行数的提及。此外,OP 说 xlrd 说该文件不存在,即没有“太大”的指示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 2016-12-19
相关资源
最近更新 更多