如何使用Python从巨大的Excel工作表中提取特定的数据行?

时间:2010-07-13 20:06:56

标签: python

我需要获取具有某些关键字的特定数据行(名称)并将其写入另一个文件。起始文件是1.5 GB的Excel文件。我不能打开它并将其保存为不同的格式。我应该如何使用python处理它?<​​/ p>

4 个答案:

答案 0 :(得分:3)

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

  1. MB中的文件有多大? [“巨大”不是一个有用的答案]

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

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

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

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

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

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

答案 1 :(得分:1)

听起来我有一个使用Excel 2007创建的电子表格,而且你只有Excel 2003。

Excel 2007可以创建包含1,048,576行16,384列的工作表,而Excel 2003只能使用65,536行乘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更改为您要打开的文件的正确位置。

答案 2 :(得分:0)

我没有使用它,但是xlrd看起来在读取Excel数据方面做得很好。

答案 3 :(得分:0)

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