我創建了以下函數以將數據從文件中提取出來。它工作正常,但對於較大的文件變得非常慢。從文件中獲取數據而無需迭代多次
def get_data(file, indexes, data_start, sieve_first = is_float):
file_list = list(file)
for i in indexes:
d_line = i+data_start
for line in file_list[d_line:]:
if sieve_first(line.strip().split(',')[0]):
yield file_list[d_line].strip()
d_line += 1
else:
break
def is_float(f):
try:
float(str(f))
except:
return False
else:
return True
with open('my_data') as f:
data = get_data(f, index_list, 3)
的文件可能是這樣的(添加爲了清楚行號):
line 1234567: # <-- INDEX
line 1234568: # +1
line 1234569: # +2
line 1234570: 8, 17.0, 23, 6487.6
line 1234571: 8, 17.0, 23, 6487.6
line 1234572: 8, 17.0, 23, 6487.6
line 1234572:
line 1234572:
line 1234572:
隨着上述例子中,線1234570通過1234572將被產生。
由於我的文件很大,有一些我不喜歡我的功能的東西。
- 首先是它將整個文件讀入內存;我這樣做,所以我可以使用行索引來解析數據。
- 其次,文件中的相同行會迭代多次 - 對於大文件而言,這會非常昂貴。
我已經弄清楚試圖使用迭代器來通過文件一次,但一直未能破解它。有什麼建議麼?
只是'爲文件行而不是'列表(文件)' –
@ cricket_007謝謝,但如果'文件'不支持索引,該函數的其餘部分將無法正常工作。 –
如果該文件不支持索引,那麼你怎麼做'file [d_line:]'? –