Ответ 1
Используйте glob для отображения всех файлов и каталогов. И затем отфильтруйте его.
p = Path('C:\\Users\\akrio\\Desktop\\Test').glob('**/*')
files = [x for x in p if x.is_file()]
Кто-нибудь может мне помочь создать функцию, которая будет создавать список всех файлов в определенном каталоге, используя библиотеку pathlib
?
Здесь у меня есть:
я имею
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))
Надеюсь, что кто-нибудь может исправить меня.
Используйте glob для отображения всех файлов и каталогов. И затем отфильтруйте его.
p = Path('C:\\Users\\akrio\\Desktop\\Test').glob('**/*')
files = [x for x in p if x.is_file()]
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('.'))
Вы можете использовать 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
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
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))