我有一個大的xlsx Excel文件(56MB,550k行),我試圖從中讀取前10行。我嘗試使用xlrd
,openpyxl
和pyexcel-xlsx
,但是它們總是花費超過35分鐘,因爲它將整個文件加載到內存中。在python中處理大型XLSX文件
我解壓縮了Excel文件,發現包含我需要的數據的xml
是800mb解壓縮。
當您在Excel中加載相同的文件需要30秒。我想知道爲什麼在Python中需要那麼多時間?
我有一個大的xlsx Excel文件(56MB,550k行),我試圖從中讀取前10行。我嘗試使用xlrd
,openpyxl
和pyexcel-xlsx
,但是它們總是花費超過35分鐘,因爲它將整個文件加載到內存中。在python中處理大型XLSX文件
我解壓縮了Excel文件,發現包含我需要的數據的xml
是800mb解壓縮。
當您在Excel中加載相同的文件需要30秒。我想知道爲什麼在Python中需要那麼多時間?
使用openpyxl's read-only mode來做到這一點。
您將可以立即使用相關工作表。
我已經這樣做了,但它在開始逐行讀取之前將整個文件加載到內存中。 – Amine
不,它不會將整個文件讀入內存。大概你沒有正確使用它。 –
這是它,我找到了一個解決方案。讀取xlsx表格的最快方法。
56MB超過500K行的文件和4張紙花6S繼續。
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()
享受和快樂的編碼。
這並不「讀取」文件只是遍歷XML。在閱讀Excel文件時,大部分時間都是從XML轉換爲相關的Python結構。 –
這由openpyxl文檔覆蓋。 –
http://stackoverflow.com/questions/38208389/how-to-stream-in-and-manipulate-a-large-data-file-in-python –
可能的重複[是openpyxl最快的軟件包來讀取大xlsx文件?](http://stackoverflow.com/questions/23796587/is-openpyxl-the-fastest-package-to-use-to-read-big-xlsx-files) –