Search code examples
pythonpython-2.7linecache

Memory error while parsing files in a folder


I'm using python 2.7

Here is my code to parse files in a folder

import linecache
import glob
path = r"G:\test\folder1"
Key = '''testresult="NOK"'''
Files = glob.glob(path+'\*.xml')
for FileName in Files:
    Loop_Count = 1
    while Loop_Count!= 50:
        Line_Read = linecache.getline(FileName, Loop_Count)
        if (Key in Line_Read):
            a = FileName.split('\\')
            b = len(a)-1
            print a[b]
            break
        elif(Loop_Count == 49):
            pass
        Loop_Count = Loop_Count+1
print "Completed"

if folder1 has many files, i'm getting memory error

Traceback (most recent call last):
  File "C:\Users\whoKnows\Desktop\test_Check111.py", line 10, in <module> Line_Read = linecache.getline(FileName, Loop_Count)
  File "C:\Python27\lib\linecache.py", line 14, in getline
lines = getlines(filename, module_globals)
  File "C:\Python27\lib\linecache.py", line 40, in getlines
return updatecache(filename, module_globals)
  File "C:\Python27\lib\linecache.py", line 128, in updatecache
lines = fp.readlines()
MemoryError

I think its because i'm opening all the files for reading and i'm not closing them. Can anyone please tell me how to close the files While using glob.


Solution

  • MemoryError means you have run out of memory. You are probably loading all the files into the memory at once. Try deleting lines not needed anymore with linecache.clearcache().