如何获取Python中可能包含许多子文件夹的目录中所有文件的绝对路径?
我知道os.walk()
递归地给我一个目录和文件的列表,但这似乎并没有让我得到我想要的东西。
答案 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())