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)
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)
尝试:
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)
如果你有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.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
您可以使用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)
所有文件和文件夹:
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)