我使用openpyxl
和numpy
来阅读大型Excel文件。代码看起来像
W = load_workbook(fname, read_only = True)
p = W.worksheets[0]
a=[]
m = p.max_row
n = p.max_column
for row in p.iter_rows():
for k in row:
a.append(k.value)
# convert list a to matrix (for example 5*6)
aa= np.resize(a, [m, n])
对于中等大小的文件(4MB excel文件,16000行和50列),它们工作正常。但是对于大文件(21B,包含100000行和50列),numpy
会因内存错误而失败。系统上有内存。
1-如何在调整矩阵大小时找到需要多少内存?
2-如何增加内存(如java中的堆大小)?
Traceback (most recent call last):
File "exread.py", line 26, in <module>
aa= np.resize(a, [m, n])
File "C:\Users\m.naderan\AppData\Local\Programs\Python\Python36\lib\site-packa
ges\numpy\core\fromnumeric.py", line 1121, in resize
a = ravel(a)
File "C:\Users\m.naderan\AppData\Local\Programs\Python\Python36\lib\site-packages\numpy\core\fromnumeric.py", line 1468, in ravel
return asanyarray(a).ravel(order=order)
File "C:\Users\m.naderan\AppData\Local\Programs\Python\Python36\lib\site-packages\numpy\core\numeric.py", line 583, in asanyarray
return array(a, dtype, copy=False, order=order, subok=True)
MemoryError
答案 0 :(得分:0)
检查操作内存使用情况的最实用的方法可能是在Unix系统上观看top
/ htop
。有人在5年前发布了一篇Python solution。
我可能错了,但我认为默认情况下对Python内核的内存使用没有限制,即MemoryError
只有当真的不够时才会发生整个系统上的可用内存(我之前运行的内存占用超过50GB的内存)。
答案 1 :(得分:0)
文档包含clear example of how to convert a worksheet to a dataframe。这比你自己的代码更容易使用和更可靠,所以为什么不使用它呢?