【发布时间】:2018-04-25 06:07:15
【问题描述】:
我需要读取 300gb 的 xlsx 文件。行数 ~ 10^9。我需要从一列中获取值。文件由 8 列组成。我想尽可能快地完成它。
from openpyxl import load_workbook
import datetime
wb = load_workbook(filename="C:\Users\Predator\Downloads\logs_sample.xlsx",
read_only=True)
ws = wb.worksheets[0]
count = 0
emails = []
p = datetime.datetime.today()
for row in ws.rows:
count += 1
val = row[8].value
if count >= 200000: break
emails.append(val)
q = datetime.datetime.today()
res = (q-p).total_seconds()
print "time: {} seconds".format(res)
emails = emails[1:]
现在循环需要大约 16 秒来读取 200.000 行。时间复杂度为 O(n)。因此,对于 10^6 行,将读取大约 1.5 分钟。位我们有 10^9。为此,我们必须等待 10^3 * 1.5 = 1500 分钟 = 25 小时。这太糟糕了... 请帮助我解决这个问题。
【问题讨论】:
-
非常有趣,因为单个 Excel .xlsx 工作表的最大行数只能是 2^20 或 1,048,576 行,而不是十亿行!我从标题中认为您误认为 csv 文件不是 Excel 文件,因此没有限制。但是您确实引用了 .xlsx。很想看到这本史诗般的工作簿。也许行分布在多张纸上?也许文件是用代码而不是 Excel.exe 程序构建的?