In this article, I will go over the most frequent tasks related to file paths and show how you can refactor the old approach of using os.path module to the new cleaner way using pathlib module.

Joining paths

import os base_path = '/home/ubuntu/' filename = 'data.csv' os . path . join ( base_path , filename )

In pathlib, we can use the division operator to separate the paths elegantly.

from pathlib import Path base_path = '/home/ubuntu/' filename = 'data.csv' Path ( base_path ) / filename

Get absolute path

import os os . path . abspath ( __file__ )

from pathlib import Path Path ( __file__ ). resolve ()

Get current working directory

import os os . getcwd ()

from pathlib import Path Path . cwd ()

Check if path is a file

import os os . path . isfile ( '/home/ubuntu/data.csv' )

from pathlib import Path Path ( '/home/ubuntu/data.csv' ). is_file ()

Check if path is a directory

import os os . path . isdir ( '/home/ubuntu/' )

from pathlib import Path Path ( '/home/ubuntu/' ). is_dir ()

Check if a path exists

import os os . path . exists ( '/home/ubuntu/' )

from pathlib import Path Path ( '/home/ubuntu/' ). exists ()

Get path to folder containing a file

import os os . path . dirname ( '/home/ubuntu/data.csv' ) # /home/ubuntu

from pathlib import Path Path ( '/home/ubuntu/data.csv' ). parent # /home/ubuntu

Get the path to the home directory

import os os . path . expanduser ( '~' )

from pathlib import Path Path . home ()

Expand the user home directory in a path

import os os . path . expanduser ( '~/Desktop' ) # '/home/ubuntu/Desktop'

from pathlib import Path Path ( '~/Desktop' ). expanduser ()

Get size in bytes of a file

import os os . path . getsize ( '/home/ubuntu/data.csv' )

from pathlib import Path Path ( '/home/ubuntu/data.csv' ). stat (). st_size

Get file extension

import os path , ext = os . path . splitext ( '/home/ubuntu/hello.py' ) # ('/home/ubuntu/hello', '.py')

from pathlib import Path Path ( '/home/ubuntu/hello.py' ). suffix # .py

Change permission of a file

import os os . chmod ( 'key.pem' , 0o400 )

from pathlib import Path Path ( 'key.pem' ). chmod ( 0o400 )

Get file name without directory

import os os . path . basename ( '/home/ubuntu/hello.py' ) # hello.py

from pathlib import Path Path ( '/home/ubuntu/hello.py' ). name # hello.py

List contents of a directory

import os os . listdir ()

from pathlib import Path Path (). iterdir ()

Create a directory

import os os . makedirs ( '/home/ubuntu/data' , exist_ok = True )

from pathlib import Path Path ( '/home/ubuntu/data' ). mkdir ( exist_ok = True )

Rename files or directories

import os os . rename ( 'rows.csv' , 'data.csv' )

from pathlib import Path Path ( 'rows.csv' ). rename ( 'data.csv' )

Delete a directory

import os os . rmdir ( '/home/ubuntu/test' )

from pathlib import Path Path ( '/home/ubuntu/test' ). rmdir ()

Reading a file

import os p = os . path . join ( '/home/ubuntu' , 'data.csv' ) with open ( p ) as fp : data = fp . read ()

In new versions of python, you can directly pass a pathlib Path to the open() function.

from pathlib import Path path = Path ( '/home/ubuntu/' ) / 'data.csv' with open ( path ) as fp : data = fp . read ()

In older versions, you can either convert the path to a string using str() or use the open() method.