Получить абсолютные пути ко всем файлам в каталоге - PullRequest
45 голосов
/ 22 марта 2012

Как получить абсолютные пути ко всем файлам в каталоге, который может содержать много подпапок в Python?

Я знаю, os.walk() рекурсивно дает мне список каталогов и файлов, но, похоже, это не дает мне то, что я хочу.

Ответы [ 8 ]

50 голосов
/ 22 марта 2012

os.path.abspath обеспечивает абсолютный путь.Используйте следующую вспомогательную функцию:

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))
15 голосов
/ 22 марта 2012

Если аргумент, заданный для os.walk, является абсолютным, то имена корневых каталогов, полученные в ходе итерации, также будут абсолютными.Таким образом, вам нужно только объединить их с именами файлов:

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))
9 голосов
/ 22 марта 2012

Попробуйте:

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
6 голосов
/ 30 августа 2017

Если у вас Python 3.4 или новее, вы можете использовать pathlib (или сторонний бэкпорт, если у вас более старая версия Python):

import pathlib
for filepath in pathlib.Path(directory).glob('**/*'):
    print(filepath.absolute())
6 голосов
/ 22 марта 2012

Вы можете использовать os.path.abspath(), чтобы превратить относительные пути в абсолютные:

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)))
0 голосов
/ 27 сентября 2018
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 голосов
/ 22 мая 2018
from glob import glob


def absolute_file_paths(directory):
    return glob(join(directory, "**"))
0 голосов
/ 19 февраля 2016

Я хотел сохранить данные подкаталога, а не файлы, и хотел, чтобы в них были только подкаталоги с одним файлом XML. Я могу сделать это так:

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
...