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

mad*_*ode 49 python absolute-path

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

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

phi*_*hag 55

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))
Run Code Online (Sandbox Code Playgroud)

  • 我认为在 `os.walk` 行上只执行一次 abspath 比在循环内执行 N 次要好 (4认同)

wim*_*wim 15

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))
Run Code Online (Sandbox Code Playgroud)


the*_*olf 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
Run Code Online (Sandbox Code Playgroud)


MSe*_*ert 8

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

import pathlib
for filepath in pathlib.Path(directory).glob('**/*'):
    print(filepath.absolute())
Run Code Online (Sandbox Code Playgroud)

  • 它使用python 3非常好,但它也显示目录。 (2认同)

Tit*_*usz 8

从 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()]
Run Code Online (Sandbox Code Playgroud)

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


Ble*_*der 7

您可以使用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)))
Run Code Online (Sandbox Code Playgroud)


use*_*840 5

所有文件和文件夹:

x = [os.path.abspath(os.path.join(directory, p)) for p in os.listdir(directory)]
Run Code Online (Sandbox Code Playgroud)

图片(.jpg | .png):

x = [os.path.abspath(os.path.join(directory, p)) for p in os.listdir(directory) if p.endswith(('jpg', 'png'))]
Run Code Online (Sandbox Code Playgroud)