Mos*_*ted 23 python path os.path
我有以下代码:
directory = r'D:\images'
for file in os.listdir(directory):
print(os.path.abspath(file))
Run Code Online (Sandbox Code Playgroud)
我想要下一个输出:
但是我得到了不同的结果:
其中D:\ code是我当前的工作目录,结果与此相同
os.path.normpath(os.path.join(os.getcwd(), file))
Run Code Online (Sandbox Code Playgroud)
所以,问题是:我必须使用os.path.abspath的目的是什么
os.path.normpath(os.path.join(directory, file))
Run Code Online (Sandbox Code Playgroud)
获取我的文件的真正绝对路径?尽可能显示真实的用例.
unh*_*ler 35
问题在于你对os.listdir()
不的理解os.path.abspath()
.os.listdir()
返回目录中每个文件的名称.这会给你:
img1.jpg
img2.jpg
...
Run Code Online (Sandbox Code Playgroud)
当你传递这些时os.path.abspath()
,它们被视为相对路径.这意味着它与您执行代码的目录相关.这就是你得到"D:\ code\img1.jpg"的原因.
相反,您要做的是将文件名与您列出的目录路径连接起来.
os.path.abspath(os.path.join(directory, file))
Run Code Online (Sandbox Code Playgroud)
listdir
在目录中生成文件名,不引用目录本身的名称.没有任何其他信息,abspath
只能从它可以知道的唯一目录形成绝对路径:当前工作目录.您始终可以在循环之前更改工作目录:
os.chdir(directory)
for f in os.listdir('.'):
print(os.path.abspath(f))
Run Code Online (Sandbox Code Playgroud)