2014-02-20 46 views
1

我寫了一個腳本來從一個(非常混亂的)數據文件導入數據。每一行都是在循環中單獨讀取和處理的。讀取數據文件時發生內存泄漏

我寫了下面的代碼會忽略標題和白線:

for line in rd_file.readlines(): 
    line_1 = line.rstrip("\n")            
    # Decide what to do based on the content in the line.      
    if "#" in line.lower(): 
     header_flag=True 
     # Don't print the header 
     pass 
    elif line.strip() == "":          
     pass 
    else:  
     [...] 

運行,我注意到了內存泄漏的腳本。我所在它使用memory_profiler,我發現這是由於:

elif line.strip() == "": 
    pass 

這是我從memory_profiler得到:

45 204.5 MiB 160.6 MiB   elif line.strip() == "" 

怎麼可能是160 MB獲得佔領只是通過跳過空白線?你有什麼建議如何解決這個問題?

+0

數據文件有多大? – GreenAsJade

+0

3.5兆字節:( –

+1

我懷疑你使用的分析器不正確 – geoffspear

回答

2

我推薦不要調用readlines(),而是依賴於python文件迭代器模式。

for line in rd_file: 
    line_1 = line.rstrip("\n") 
    ... 
+0

我不得不使用readlines,因爲我正在處理一個spt文件,如果我在rd_file中使用'for line:''我在rd_file()中得到錯誤': TypeError:'file'對象不可調用'。請告訴我你是否有解決這個問題的建議 –

+2

你犯了一個錯字,在rd_file之後鬆開parens。迭代器模式中的對象在python文檔中有很好的記錄 – user590028

+0

對,我提出了建議的修改,但是沒有修復漏洞 –