簡體   English   中英

在Python 2.7中讀取大文件會占用太多內存

[英]Reading a big file cost too much memory in Python 2.7

我使用.readline()逐行解析文件,因為我需要找出將數據提取到列表中的開始位置,以及要暫停提取的結束點,然后重復直到文件結束。 我要讀取的文件格式如下:

blabla...
useless....
...
/sign/
data block(e.g. 10 cols x 1000 rows) 
... blank line 
/sign/    
data block(e.g. 10 cols x 1000 rows)
... blank line 
... 
EOF

讓我們將此文件稱為“ myfile”和我的python代碼段:

f=open('myfile','r')
blocknum=0 #number the data block
data=[]
while True:
       # find the extract begnning
       while not f.readline().startswith('/sign/'):pass
       # creat multidimensional list to store data block
       data=append([])
       blocknum +=1
       line=f.readline()

       while line.strip():
       # check if the line is a blank line, i.e the end of one block
               data[blocknum-1].append(["2.6E" %float(x) for x in line.split()])
               line = f.readline()
       print "Read Block %d" %blocknum
       if not f.readline(): break

運行結果是,讀取500M文件會消耗將近2GB的RAM,我無法弄清楚,有人幫忙! 非常感謝!

您的代碼中有很多非Python歧義的行。 我不確定,但是認為您可以先按照以下方式修改代碼,然后根據內存使用情況再次檢查代碼:

data=[]

with open('myfile','r') as f:
    for line in f:
       # find the extract beginning - think you can add here more parameters to check
       if not line.strip() or line.startswith('/sign/'):
           continue
       data.append(["%2.6E" % float(x) for x in line.strip().split()])

但是我認為該代碼還將占用大量內存-但是,如果您真的不需要存儲從文件中讀取的所有數據,則可以修改代碼以使用生成器表達式並逐行處理文件數據-這樣可以節省我想你的記憶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM