Ist openpyxl das schnellste Paket zu verwenden, um große xlsx Dateien zu lesen?

Ich bin ein Python-Anfänger, aber ich schreibe ein Skript mit openpyxl, um in großen xlsx-Dateien (60000×187) in Numpy Arrays zu lesen, um ein maschinelles Lernen zu machen. Mein Code:

from openpyxl import load_workbook import re from numpy import * wb = load_workbook(filename = 'dataSheet.xlsx', use_iterators = True) #dataSheet.xlsx ws1 = wb.get_sheet_by_name(name = 'LogFileData') startCol = 1 #index from 1 startRow = 2 #start at least from 2 because header is in 1st row endCol = ws1.get_highest_column() #index of last used column, from 1 endRow = ws1.get_highest_row() #index of last used row, indexed from 1 diff = endRow - startRow + 1 #number of rows in the data array header = [] #contains the column labels data = zeros((0,endCol), dtype=float64) #2D array that holds the data #puts the column headers into a list for row in ws1.get_squared_range(1, 1, endCol, 1): #indexed from 1 for cell in row: for match in re.findall("<(.*?)>", cell.value): header.append(match) #indexed from 1 when using the ws1 #index from 0 when using the Numpy arrays, tempRow, tempPt, data for index, row in enumerate(ws1.iter_rows(row_offset=1)): tempRow = zeros((1,0), dtype=float64) tempPt = zeros((1,1), dtype=float64) for cell in row: value = cell.value if isinstance(value, basestring): tempPt[0][0] = None else: tempPt[0][0]=value tempRow = hstack((tempRow,tempPt)) data = vstack((data,tempRow)) 

Ist openpyxl und der optimierte_reader der schnellste und platzsparendste Weg dazu? Ein Kollege erwähnte, dass eine csv-Datei schneller sein könnte, wenn sie mit itertools oder einem ähnlichen Paket verwendet wird.

Bearbeiten 1: Meine Spezifikationen Ubuntu 10.04 LTS auf VMWare Python 2.6.5 Intel i5 Quad Core 2.5GHz Windows 7 Enterprise

2 Solutions collect form web for “Ist openpyxl das schnellste Paket zu verwenden, um große xlsx Dateien zu lesen?”

Ich habe den optimierten Leser auf meinem 2009 MacBook bei etwa 20s für 1 Million Zellen mit Zahlen benchmarked. Ich würde erwarten, dass ein leichter Treffer mit Ihrem Code wegen der Indirektion für Zellen und das Muster Matching (kompilieren Sie das Muster außerhalb der Schleife), aber würde denken, die Geschwindigkeit wäre noch akzeptabel. CSV wird natürlich schneller sein, wenn man es leicht bekommen kann.

Seien Sie interessiert, Ihre Zahlen zu kennen.

Der schnellste Weg, um ein xlsx Blatt zu lesen.

56mb Datei mit über 500k Zeilen und 4 Blätter nahm 6s, um fortzufahren.

 import zipfile from bs4 import BeautifulSoup paths = [] mySheet = 'Sheet Name' filename = 'xlfile.xlsx' file = zipfile.ZipFile(filename, "r") for name in file.namelist(): if name == 'xl/workbook.xml': data = BeautifulSoup(file.read(name), 'html.parser') sheets = data.find_all('sheet') for sheet in sheets: paths.append([sheet.get('name'), 'xl/worksheets/sheet' + str(sheet.get('sheetid')) + '.xml']) for path in paths: if path[0] == mySheet: with file.open(path[1]) as reader: for row in reader: print(row) ## do what ever you want with your data reader.close() 

Genießen Sie und glücklich Codierung.

  • Serving Excel (xlsx) Datei an den Benutzer zum Download in Django (Python)
  • Einstellungsstile in Openpyxl
  • Openpyxl-Einstellnummernformat
  • Python ist die beste Programmiersprache der Welt.