我使用openpyxl
和numpy
来读取大型excel文件。代码看起来像numpy无法调整大矩阵
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文件),他们工作得很好。但是,对于大文件(具有100000行和50列的21B),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
这个使用'resize'有什么意义?这是很少需要的。使用np.array从列表中创建一个数组。 – hpaulj
嗯,我认为它会整齐地将数组大小调整为m * n。所以,请让我知道如何使用'np.array'。/ – mahmood
您可以使用'aa = np.array([[i.value for i in j] for j in p.rows])''而不是其他任何东西前两行。 – Nyps