os.path.abspath('file1.txt') doesn't return the correct path

Say the path of the file 'file1.txt' is /home/bentley4/Desktop/sc/file1.txt Say my current working directory is /home/bentley4

import os
os.path.abspath('file1.txt')

returns /home/bentley4/file1.txt

os.path.exists('file1.txt')

returns False. If I do

os.path.abspath('file_that_does_not_exist.txt')

It returns /home/bentley4/file_that_does_not_exist.txt But again, this is not correct. The file does not even exist on my computer. Is there a way to get the correct absolute path from any directory I am currently working in? (aside from defining a new function)

So this only works when I am in the same directory as the existing file or in the directory one directory or more further from the path of the directory of that file?

os.path.abspath(filename) returns an absolute path as seen from your current working directory. It does no checking whether the file actually exists.

If you want the absolute path of /home/bentley4/Desktop/sc/file1.txt and you are in /home/bentley4 you will have to use os.path.abspath("Desktop/sc/file1.txt").

10.1. os.path — Common pathname manipulations — Python 2.7.18 , os2emxpath for OS/2 EMX paths. os.path. abspath (path)�. Return a normalized absolutized version of� 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.

abspath just builds a path, it doesn't check anything about files existing.

From the docs:

On most platforms, this is equivalent to normpath(join(os.getcwd(), path)).

Python: os.path.abspath() method with example, According to docs os.path.abspath() returns a normalized absolutized version of the pathname path which may sound fancy but it simply means� os.path.abspath(path) Returns a normalized absolutized version of the pathname path. 2: os.path.basename(path) Returns the base name of pathname path. 3: os.path.commonprefix(list) Returns the longest path prefix (taken character-by-character) that is a prefix of all paths in list. 4: os.path.dirname(path) Returns the directory name of pathname

You will get the path with os.path.abspath(__file__).

Misunderstanding of python os.path.abspath, 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. Python os.path.abspath () Examples The following are 30 code examples for showing how to use os.path.abspath (). These examples are extracted from open source projects. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example.

The problem should be that previously the cwd was changed using the os.chdir(another_path) and it's still loaded in the context of the current execution. so the fix should be restore the original path after the use of the task in another_path has finish. Example :

  original_path = os.getcwd()
  os.chdir(another_path) 
  # here perform some operation over another_path
  os.chdir(original_path ) # here is the restore of the original path

Why would one use both, os.path.abspath and os.path.realpath , os.path.realpath derefences symbolic links on those operating systems which support them. os.path.abspath simply removes things like . and� os.path.ismount (path) ¶ Return True if pathname path is a mount point: a point in a file system where a different file system has been mounted.On POSIX, the function checks whether path’s parent, path /.., is on a different device than path, or whether path /.. and path point to the same i-node on the same device — this should detect mount points for all Unix and POSIX variants.

I was working on the same issue and I found this, hope it helps you:

os.path.join(root, f)

16.2. Finding the path, os.path.abspath is the key here. It takes a pathname, which can be partial or even blank, and returns a fully qualified pathname. os.path.basename (path) ¶ Return the base name of pathname path.This is the second element of the pair returned by passing path to the function split().Note that the result of this function is different from the Unix basename program; where basename for '/foo/bar/' returns 'bar', the basename() function returns an empty string ('').

Python Examples of os.path.abspath, The following are 30 code examples for showing how to use os.path.abspath(). These examples are extracted from open source projects. You can vote up the� import os script_path = os.path.dirname(os.path.abspath( __file__ )) This works for me and is what I currently use. The code above returns the absolute path, by the way. According to the documentation, it is the equivalent of. import os os.path.normpath(join(os.getcwd(), path)) I’ve also seen people recommending the following similar solution:

Python OS.Path Methods, Path Methods - The os.path is another Python module, which also provides a big range of useful methods to manipulate files and 1, os.path.abspath(path). The os.path module requires function nesting, but the pathlib modules' Path class allows us to chain methods and attributes on Path objects to get an equivalent path representation.

16.2. Finding the path - Dive Into Python, os.path.abspath is the key here. It takes a pathname, which can be partial or even blank, and returns a fully qualified pathname. OS comes under Python’s standard utility modules. This module provides a portable way of using operating system dependent functionality. os.path module is sub module of OS module in Python used for common path name manipulation. os.path.dirname () method in Python is used to get the directory name from the specified path.

Comments
  • That's quite curious, os.path.abspath should just work. What does os.getcwd() return? ... Oh, d'oh, hang on, you're saying that you're in /home/bentley4 and you're expecting os.path.abspath to somehow find a file in a sub-directory thereof? It doesn't do that.
  • What are you trying to do? Are you trying to find a file by name in any of the sub-directories of your current working directory?
  • Well, it starts by checking os.path.isabs(). But in this case, yes.
  • This does not work. os.path.abspath('file1.txt') behaves the same as os.path.abspath('file1.txt').
  • @Bentley4 os.path.abspath('file1.txt') will always behave the same as os.path.abspath('file1.txt') as long as Python lives...