对python os.path.abspath的误解

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:\影像\ img1.jpg
  • D:\ images\img2.jpg等等

但是我得到了不同的结果:

  • d:\代码\ img1.jpg
  • d:\代码\ img2.jpg

其中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)


che*_*ner 5

listdir目录中生成文件名,不引用目录本身的名称.没有任何其他信息,abspath只能从它可以知道的唯一目录形成绝对路径:当前工作目录.您始终可以在循环之前更改工作目录:

os.chdir(directory)
for f in os.listdir('.'):
    print(os.path.abspath(f))
Run Code Online (Sandbox Code Playgroud)