Quelqu'un peut-il m'aider à créer une fonction qui créera une liste de tous les fichiers d'un répertoire en utilisant la bibliothèque pathlib
?
Ici, j'ai un:
J'ai
c:\desktop\test\A\A.txt
c:\desktop\test\B\B_1\B.txt
c:\desktop\test\123.txt
Je m'attendais à avoir une seule liste qui aurait les chemins ci-dessus, mais mon code retourne une liste imbriquée.
Voici mon code:
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))
J'espère que tout le monde pourra me corriger.
Utilisez glob pour lister tous les fichiers et répertoires. Et puis filtrez-le.
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('.'))
Vous pouvez utiliser os.listdir (). Vous obtiendrez tout ce qui est dans un répertoire - fichiers et répertoires.
Si vous ne voulez que des fichiers, vous pouvez soit filtrer ceci en utilisant os.path:
from os import listdir
from os.path import isfile, join
onlyfiles = [files for files in listdir(mypath) if isfile(join(mypath, files))]
ou vous pouvez utiliser os.walk () qui donnera deux listes pour chaque répertoire visité - une division en fichiers et répertoires pour vous. Si vous ne voulez que le premier répertoire, vous pouvez simplement casser la première fois qu'il cède.
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