In this post I summarize the commonly-used methods in Python os package.

method related to paths

method description
os.path.join join string to from a path
os.path.split split directory and file name
os.path.basename get the base name of file from a complete path
os.path.abspath get the absolute path a file
os.path.dirname get the directory name from a path

If you want to combine several string to form a valid path, you can use os.path.join(). For example, if you want to combine "F:\\paper_ref", "cnn_classify", "hinton2012.bib" into a complete path,you can manually combine them using path separator of your system. But this way has some potential portability issue and is also error-prone. The best way is to use os.path.join method.


os.path.split can split the directory name and file anme, for example,

# output: ('d:/my_program', '')

you can use os.path.basename to remove directory info and only get the base name of a file.

# output: 'test.jpg'

With os.path.abspath, we can get the absolute path of a file in a folder. Suppose there is file named colour_themes.conf under current directory, you can use following command to get its absolute path,

# output: '/home/jdhao/files/colour_themes.conf'

The os.path.dirname() method will return the path of a file (not including the file name)

# output: file/music

check path or file

method decription
os.path.isabs() decide if a path is absolute path
os.path.isdir() decide if a path is directory path and check if it really exists
os.path.isfile() decide if the given string is a file, also check if it really exists
os.path.exists() check if a file or directory really exists

directory manipulations

method description
os.getcwd() get current working directory
os.chdir() change current working directory
os.listdir() list sub-directory and files under a certain directory1
os.mkdir() create a new directory
os.rmdir() remove an empty directory, it can not remove non-empty directory2
os.remove() delete a file

some attribute

There are also several use attribute. For better portability of your code, you should considering using these attribute instead of hard code.

attribute description
os.linesep line break character
os.sep separator in a normal directory path name
os.pathsep separator for the PATH environment variable


  1. note that this method only output sub-directory and file names, with no path info
  2. if you want to delete a non-empty directory, use shutil.rmtree