RayBae
RayBae

Reputation: 62

Python remove elements from unknown list with a specific string

There are similar questions to this but not quite what im looking for.

Having created a list with all files from a specific path im looking to filter out anything that does not contain a specific sequence in a string.

def filter():
    someFiles = os.listdir(somePath)
    listSize = len(someFiles)

    for i in range(0, listSize):
        if (".py" not in someFiles):
            someFiles.remove(i)
            print("{0}".format(someFiles))

Im aware i shouldn't be modifying the size of a list through a loop but i left it just to roughly give an idea of what i'm trying to accomplish

I did not make it clear, the issue that im facing is that i'm not sure what approach i should be taking when trying to remove every element that does not contain ".py". What I wrote above is more of a rough draft.

Upvotes: 0

Views: 848

Answers (2)

DeepSpace
DeepSpace

Reputation: 81594

for i in range(0, listSize):
    if (".py" not in someFiles):
        someFiles.remove(i)

Note that you are trying to remove i from the list. i will be an index of an element in the list (0, 1, etc) and not an actual element. This will raise an error.


Simply use list comprehension to get only the files you do need:

required_files = [f for f in someFiles if '.py' in f]

You could also use filter but it will require a lambda (and also note it will return a filter object and not a list):

required_files = list(filter(lambda x: '.py' in x, someFiles))

Upvotes: 3

grepe
grepe

Reputation: 1977

First of all, you don't need to use for loop to iterate over a list in Python. Simpler version of what you've done would be

list2 = []
for filename in list1:
    if (".py" in filename):
        list2.append(filename)

but filtering a list (or more generally, an iterator) is so common, that there is Python builtin function called, unsurprisingly, filter:

list2 = list(filter(lambda i: ".py" in i, list1))

(this would work at least in Python3)

Upvotes: 1

Related Questions