我試圖找到一種有效的方式來讀取一個非常大的文本文件(約2,000,000行)。這些線中約90%(實際上最後90%)具有三列格式,並用於存儲稀疏矩陣。從一個大的文本文件到Python的稀疏矩陣
這是我做的。首先,我處理文件的前10%:
i=1
cpt=0
skip=0
finnum=0
indice=1
vec=[]
mat=[]
for line in fileinput.input("MY_TEXT_FILE.TXT"):
if i==1:
# skipping the first line
skip = 1
if (finnum == 0)and(skip==0):
# special reading operation for the first 10% (approximately)
tline=shlex.split(line)
ind_loc=0
while ind_loc<len(tline):
if (int(tline[ind_loc])!=0):
vec.append(int(tline[ind_loc]))
ind_loc=ind_loc+1
if (finnum == 1)and(skip==0):
print('finnum = 1')
h=input()
break
if (' 0' in line):
finnum = 1
if skip == 0:
i=i+1
else:
skip=0
i=i+1
cpt=cpt+1
然後我提取剩餘的90%到列表:
這樣就可以非常快的讀一遍低內存消耗的文本文件。其缺點是,矩陣是字符串的列表,每個串被類似:
>>> matrix[23]
' 5 11 8.320234929063493E-008\n'
我曾嘗試過矩陣與shlex.split命令合併線條中使用迭代過程從字符串列表轉到數組,但這非常耗時。
您是否知道從字符串列表到數組的快速策略?
我想知道的是,如果有什麼比這個過程更快:
A=[0]*len(matrix)
B=[0]*len(matrix)
C=[0]*len(matrix)
for i in range(len(matrix)):
line = shlex.split(matrix[i])
A[i]=float(line[0])
B[i]=float(line[1])
C[i]=float(line[2])
阿蘭
「要從字符串列表轉到數組」您希望做什麼?你想在存儲器中保存矩陣(列表的列表)? –
我希望能夠訪問我的列表中的每個數值並獲取關聯的(nx3)矩陣。 – Alain
你能以某種方式修改文件的格式嗎?因爲它聽起來像HDF5完美配合。 –