I have following code:
directory = r'D:\images' for file in os.listdir(directory): print(os.path.abspath(file))
and I want next output:
But I get different result:
where D:\code is my current working directory and this result is the same as
os.path.normpath(os.path.join(os.getcwd(), file))
So, the question is: What is the purpose of os.path.abspath while I must use
os.path.normpath(os.path.join(directory, file))
to get REAL absolute path of my file? Show real use-cases if possible.
The problem is with your understanding of os.listdir()
not os.path.abspath()
. os.listdir()
returns the names of each of the files in the directory. This will give you:
img1.jpg img2.jpg ...
When you pass these to os.path.abspath()
, they are seen as relative paths. This means it is relative to the directory from where you are executing your code. This is why you get "D:\code\img1.jpg".
Instead, what you want to do is join the file names with the directory path you are listing.
os.path.abspath(os.path.join(directory, file))
listdir
produces the file names in a directory, with no reference to the name of the directory itself. Without any other information, abspath
can only form an absolute path from the only directory it can know about: the current working directory. You can always change the working directory before your loop:
os.chdir(directory) for f in os.listdir('.'): print(os.path.abspath(f))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With