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