获取目录中所有文件的绝对路径

时间:2012-03-22 05:16:02

标签: python absolute-path

如何获取Python中可能包含许多子文件夹的目录中所有文件的绝对路径?

我知道os.walk()递归地给我一个目录和文件的列表,但这似乎并没有让我得到我想要的东西。

11 个答案:

答案 0 :(得分:49)

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

答案 1 :(得分:13)

如果赋予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))

答案 2 :(得分:9)

尝试:

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

答案 3 :(得分:6)

如果你有Python 3.4或更新版本,你可以使用pathlib(如果你有一个较旧的Python版本,可以使用第三方backport):

import pathlib
for filepath in pathlib.Path(directory).glob('**/*'):
    print(filepath.absolute())

答案 4 :(得分:5)

您可以使用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)))

答案 5 :(得分:3)

从python 3.5开始,惯用的解决方案是:

import os

def absolute_file_paths(directory):
    path = os.path.abspath(directory)
    return [entry.path for entry in os.scandir(path) if entry.is_file()]

这不仅读起来更好,而且在许多情况下也更快。 有关更多详细信息(如忽略符号链接),请参见原始python文档: https://docs.python.org/3/library/os.html#os.scandir

答案 6 :(得分:0)

我想保留子目录的详细信息而不是文件,并且只想要包含一个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

答案 7 :(得分:0)

from glob import glob


def absolute_file_paths(directory):
    return glob(join(directory, "**"))

答案 8 :(得分:0)

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)

答案 9 :(得分:0)

x = [os.path.abspath(os.path.join(directory, p)) for p in os.listdir(directory)]

答案 10 :(得分:0)

尝试:

from pathlib import Path
path = 'Desktop'
files = list(filter(lambda filepath: filepath.is_file(), pathlib.Path(path).glob('*')))
for file in files:
   print(file.absolute())