Список всех файлов в каталоге?

Кто-нибудь может мне помочь создать функцию, которая будет создавать список всех файлов в определенном каталоге, используя библиотеку pathlib?

Здесь у меня есть:

enter image description here

я имею

  • c:\desktop\test\A\A.txt

  • c:\desktop\test\B\B_1\B.txt

  • c:\desktop\test\123.txt

Я ожидал, что у меня будет один список с указанными выше путями, но мой код возвращает вложенный список.

Вот мой код:

from pathlib import Path

def searching_all_files(directory: Path):   
    file_list = [] # A list for storing files existing in directories

    for x in directory.iterdir():
        if x.is_file():

           file_list.append(x)
        else:

           file_list.append(searching_all_files(directory/x))

    return file_list


p = Path('C:\\Users\\akrio\\Desktop\\Test')

print(searching_all_files(p))

Надеюсь, что кто-нибудь может исправить меня.

Ответ 1

Используйте glob для отображения всех файлов и каталогов. И затем отфильтруйте его.

p = Path('C:\\Users\\akrio\\Desktop\\Test').glob('**/*')
files = [x for x in p if x.is_file()]

Ответ 2

from pathlib import Path
from pprint import pprint

def searching_all_files(directory):
    dirpath = Path(directory)
    assert(dirpath.is_dir())
    file_list = []
    for x in dirpath.iterdir():
        if x.is_file():
            file_list.append(x)
        elif x.is_dir():
            file_list.extend(searching_all_files(x))
    return file_list

pprint(searching_all_files('.'))

Ответ 3

Вы можете использовать os.listdir(). Он доставит вам все, что в каталоге - файлы и каталоги.

Если вы хотите просто файлы, вы можете либо отфильтровать это с помощью os.path:

from os import listdir
from os.path import isfile, join
onlyfiles = [files for files in listdir(mypath) if isfile(join(mypath, files))]

или вы можете использовать os.walk(), который даст два списка для каждого каталога, который он посещает, - разделение на файлы и каталоги для вас. Если вам нужен только верхний каталог, вы можете просто сломать первый раз, когда он даст

from os import walk
files = []
for (dirpath, dirnames, filenames) in walk(mypath):
    files.extend(filenames)
    break

Ответ 4

def searching_all_files(directory: Path):   
    file_list = [] # A list for storing files existing in directories

    for x in directory.iterdir():
        if x.is_file():
            file_list.append(x)#here should be appended
        else:
            file_list.extend(searching_all_files(directory/x))# need to be extended

    return file_list

Ответ 5

import pathlib

def get_all_files(dir_path_to_search):
    filename_list = []

    file_iterator = dir_path_to_search.iterdir()

    for entry in file_iterator:
            if entry.is_file():
                #print(entry.name)
                filename_list.append(entry.name)

    return filename_list

Функция может быть проверена как -

dir_path_to_search= pathlib.Path("C:\\Users\\akrio\\Desktop\\Test")
print(get_all_files(dir_path_to_search))