Pi schreef op 22/05/2018 21:06:
import os

files = []

def find_db(paths):
     for path in paths.split():
         for root, dirs, filenames in os.walk(path):
             for name in filenames:
                 if name.endswith((".db", ".sqlite", ".sqlite3")):
                     files.append(name + ', ' + os.path.join(root, name))

     return sorted(set(files))

But with more paths gives files only for last path given:

 >>> find_db("/home/user/Desktop, /dbbs")

Do you really need to pass your paths as a comma-separated string? Commas and spaces are legal characters in paths. There could, in theory, really exist a path "/home/user/Desktop, /ddbs". Probably not in your use case, but still.

If possible, depending on where your paths come from, it's better to pass the paths as a list to avoid the ambiguity:

def find_db(paths):
    for path in paths:
        ....

find_db(["/home/user/Desktop", "/ddbs"])


Another point: it's far better to make files a local variable in the function instead of a global one. Also you can make it a set from the beginning: that will avoid duplicates earlier:

def find_db(paths):
    files = set()
    for path in paths:
        for root, dirs, filenames in os.walk(path):
            for name in filenames:
                if name.endswith(('.db', '.sqlite', '.sqlite3')):
                    files.add(name + ',' + os.path.join(root, name))
    return sorted(files)


Last point: I didn't know endswith can take a tuple of suffixes instead of one single suffix. Cool, I learned something new!

--
The saddest aspect of life right now is that science gathers knowledge
faster than society gathers wisdom.
  -- Isaac Asimov

Roel Schroeven

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to