Why are these strings escaping from my regular expression in python?
Question: In my code, I load up an entire folder into a list and then try to get rid of
every file in the list except the .mp3 files.

    
    
    import os
    import re
    path = '/home/user/mp3/'
    dirList = os.listdir(path)
    dirList.sort()
    i = 0
    for names in dirList:
      match = re.search(r'\.mp3', names)
      if match:
        i = i+1
      else:
        dirList.remove(names)
    print dirList
    print i
    

After I run the file, the code does get rid of some files in the list but
keeps these two especifically:

> ['00. Various Artists - Indie Rock Playlist October 2008.m3u', '00. Various
> Artists - Indie Rock Playlist October 2008.pls']

I can't understand what's going on, why are those two specifically escaping my
search.


Answer: You are modifying your list inside a loop. That can cause issues. You should
loop over a copy of the list instead (`for name in dirList[:]:`), or create a
new list.

    
    
    modifiedDirList = []
    for name in dirList:
        match = re.search(r'\.mp3', name)
        if match:
            i += 1
            modifiedDirList.append(name)
    
    print modifiedDirList
    

Or even better, use a list comprehension:

    
    
    dirList = [name for name in sorted(os.listdir(path))
               if re.search(r'\.mp3', name)]
    

The same thing, without a regular expression:

    
    
    dirList = [name for name in sorted(os.listdir(path))
               if name.endswith('.mp3')]
    

