Comment obtenir les chemins absolus de tous les fichiers d'un répertoire pouvant contenir de nombreux sous-dossiers en Python?
Je sais que os.walk()
me donne de manière récursive une liste de répertoires et de fichiers, mais cela ne semble pas me donner ce que je veux.
os.path.abspath
vérifie qu'un chemin est absolu. Utilisez la fonction d'assistance suivante:
import os
def absoluteFilePaths(directory):
for dirpath,_,filenames in os.walk(directory):
for f in filenames:
yield os.path.abspath(os.path.join(dirpath, f))
import os
for root, dirs, files in os.walk(os.path.abspath("../path/to/dir/")):
for file in files:
print os.path.join(root, file)
Essayer:
import os
for root, dirs, files in os.walk('.'):
for file in files:
p=os.path.join(root,file)
print p
print os.path.abspath(p)
print
Vous pouvez utiliser os.path.abspath()
pour transformer les chemins relatifs en chemins absolus:
file_paths = []
for folder, subs, files in os.walk(rootdir):
for filename in files:
file_paths.append(os.path.abspath(os.path.join(folder, filename)))
Si vous avez Python 3.4 ou plus récent, vous pouvez utiliser pathlib
(ou un backport tiers si vous avez une version plus ancienne de Python):
import pathlib
for filepath in pathlib.Path(directory).glob('**/*'):
print(filepath.absolute())
from glob import glob
def absolute_file_paths(directory):
return glob(join(directory, "**"))
for root, directories, filenames in os.walk(directory):
for directory in directories:
print os.path.join(root, directory)
for filename in filenames:
if filename.endswith(".JPG"):
print filename
print os.path.join(root,filename)
Je voulais conserver les détails du sous-répertoire et non les fichiers et ne voulais que des sous-répertoires contenant un fichier xml. Je peux le faire de cette façon:
for rootDirectory, subDirectories, files in os.walk(eventDirectory):
for subDirectory in subDirectories:
absSubDir = os.path.join(rootDirectory, subDirectory)
if len(glob.glob(os.path.join(absSubDir, "*.xml"))) == 1:
print "Parsing information in " + absSubDir