Рекурсивная функция. Поиск путей файлов во множесте папок

Хочу просканировать директорию с неопределённым количеством поддиректорий, и вывести список путей ко всем файлам.

import os
def path_cheker(dir):
    file_list=[]
    for item in os.listdir(dir):
        full_path=os.path.join(dir,item)
        if os.path.isdir(full_path):  #Если item это папка, захит и сканирует её
            path_cheker(full_path)
        elif os.path.isfile(full_path): 
            file_list.append(full_path)
    return file_list

task_dir="movie_analis\\task"
print(path_cheker(task_dir))

Выводит пустой список...:

[]

Подскажите пожалуйста, в чём ошибка с добавлением в список, голову сломал.

Из ответов: все рабочие,но моей логике больше всего подошло решение crazyelf

Конечный код, такого вида:

import os
def path_cheker(papka, result_list=None):
    if result_list==None:
       result_list=[]
    for item in os.listdir(papka):
        full_path=os.path.join(papka,item)
        if os.path.isdir(full_path): 
            path_cheker(full_path)
        elif os.path.isfile(full_path): 
            result_list.append(full_path)
    return result_list

task_dir="movie_analis\\task"
path_cheker(task_dir)

Ответы (3 шт):

Автор решения: pb318

Самый простой способ -

[str(file) for file in pathlib.Path(dir).rglobe('\*.*')) if file.is_file()]

pathlib намного удобнее для операций с файлами, входит в стандартные библиотеки питона

→ Ссылка
Автор решения: Сергей Кох

У вас при каждом вызове функции список обнуляется file_list=[]. Вынесете создание списка из функции.

import os
file_list=[]
def path_cheker(dir):
→ Ссылка
Автор решения: CrazyElf

Хоть ответ с выносом переменной из функции и работает, но так лучше не делать. По-нормальному все переменные должны передаваться в функции явным образом. В этой парадигме ваш код нужно было бы написать так:

def path_cheker(dir, file_list=None):
    if file_list is None:
        file_list=[]
    for item in os.listdir(dir):
        full_path=os.path.join(dir,item)
        if os.path.isdir(full_path): 
            path_cheker(full_path, file_list)
        elif os.path.isfile(full_path): 
            file_list.append(full_path)
    return file_list

Обратите внимание, что нельзя использовать в питоне в качестве дефолтных параметров коллекции, например так file_list=[]. Почему - этот вопрос много раз тут обсуждался, я не буду повторяться. Ну то есть использовать конечно можно, но поведение функции будет не такое, как ожидается.

Кроме того, хорошо бы поменять название переменной dir на, скажем, path, потому что dir - это встроенная функция питона. Перекрывать встроенные функции нехорошо.

→ Ссылка