Как извлечь определенные строки данных из огромного листа Excel с помощью Python?

Мне нужно получить определенные строки данных, в которых есть определенные ключевые слова (имена) и записать их в другой файл. Начальный файл представляет собой файл Excel объемом 1,5 ГБ. Я не могу просто открыть его и сохранить его в другом формате. Как я должен обрабатывать это с помощью python?

Ответ 1

Я автор и сторонник xlrd. Измените свой вопрос, чтобы ответить на следующие вопросы. [Такой материал в комментариях SO очень сложно прочитать]

  • Насколько велик файл в MB? [ "Огромный" не является полезным ответом]

  • Какое программное обеспечение создало файл?

  • Сколько памяти у вас на компьютере?

  • Что именно происходит при попытке открыть файл с помощью Excel? Пожалуйста, объясните: "Я могу открыть его частично".

  • Что именно сообщение об ошибке, которое вы получаете при попытке открыть "C:\bigfile.xls" с помощью script с помощью xlrd.open_workbook? Включите script, который вы запустили, полную трассировку и сообщение об ошибке

  • Какая операционная система, какая версия Python, какая версия xlrd?

  • Знаете ли вы, сколько листов в файле есть?

Ответ 2

Мне кажется, что у вас есть электронная таблица, созданная с использованием 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, убедитесь, что в корневом каталоге вашего диска есть файл под названием 'bigfile.xls'. Если файл отсутствует, измените wb_path на правильное местоположение файла, который вы хотите открыть.

Ответ 3

Я не использовал его, но xlrd выглядит так, будто он отлично справляется с чтением данных Excel.

Ответ 4

Ваша проблема в том, что вы используете Excel 2003. Чтобы читать этот файл, вам нужно использовать более новую версию. 2003 не будет открывать файлы размером более 1 М строк.