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

问题描述:

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

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

+0

可不可以给一个你期望什么输入和输出的例子 – cwallenpoole 2012-03-22 05:18:59

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

我认为在'os.walk'上只做一次abspath比在内部循环中做N次更好 – wim 2012-03-22 05:29:44

+0

这样做可行,但只能通过“意外”。读取'os.path.join'的合约,如果其中一个参数是绝对的,我找不到任何可以保证结果是绝对的地方,尽管这是一个合理的假设。 – phihag 2012-03-22 05:32:59

+0

最后有一个多余的括号标记。应该是产量os.path.abspath(os.path.join(dirpath,f)) – jumbopap 2014-02-05 18:26:48

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

好吧,我明白你的意思,只是我不想要这些文件,但想要特定的子目录。我已经发布了下面的解决方案。 – 2016-02-19 10:25:34

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

当你想加入'文件夹'时,这不会将'cwd'加入'filename'! – wim 2012-03-22 05:27:09

+0

谢谢,搅拌器。但我认为它必须是.. os.path.abspath(os.path.join(文件夹,文件名)).. – madCode 2012-03-22 05:32:49

+1

为什么是的,它的确如此。谢谢,我修好了。 – Blender 2012-03-22 05:32:50

尝试:

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 
+0

无论如何要做到这一点,而不捕获隐藏的文件? – 2013-12-12 19:11:56

+0

@MarcelMarino'如果不是file.startswith('。')' – 2015-10-28 20:46:41

我想保持子目录的细节,而不是文件,并希望只在他们一个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 

如果你有Python的3.4或更新版本,您可以使用pathlib(或第三方反向移植,如果你有一个旧的Python版本):

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