web-dev-qa-db-fra.com

Obtenir les chemins absolus de tous les fichiers d'un répertoire

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. 

38
madCode

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))
47
phihag
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)
10
wim

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
9
the wolf

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)))
5
Blender

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())
5
MSeifert
from glob import glob


def absolute_file_paths(directory):
    return glob(join(directory, "**"))
0
AmjadHD
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)
0
Robert A

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
0
Eamonn Kenny