Renaming file extension using pathlib (python 3)

33,069

Solution 1

You have to actually rename the file not just print out the new name.

  1. Use Path.rename()

     from pathlib import Path
     my_file = Path("E:\\seaborn_plot\\x.dwt")
     my_file.rename(my_file.with_suffix('.txt'))
    

Note: To replace the target if it exists use Path.replace()

  1. Use os.rename()

     import os
     my_file = 'E:\\seaborn_plot\\x.dwt'
     new_ext = '.txt'
     # Gets my_file minus the extension
     name_without_ext = os.path.splitext(my_file)[0]
     os.rename(my_file, name_without_ext + new_ext)
    

Ref:

  1. os.path.splitext(path)
  2. PurePath.with_suffix(suffix)

Solution 2

From the docs:

Path.rename(target)

Rename this file or directory to the given target. On Unix, if target exists and is a file, it will be replaced silently if the user has permission. target can be either a string or another path object.

pathlib — Object-oriented filesystem paths on docs.python.org

You could use it like this:

from pathlib import Path


filename = Path("E:\\seaborn_plot\\x.dwt")
filename_replace_ext = filename.with_suffix(".txt")
filename.rename(filename_replace_ext)
Share:
33,069
user3398600
Author by

user3398600

Updated on July 09, 2022

Comments

  • user3398600
    user3398600 almost 2 years

    I am using windows 10 and winpython. I have a file with a .dwt extension (it is a text file). I want to change the extension of this file to .txt.

    My code does not throw any errors, but it does not change the extension.

    from pathlib import Path
    
    filename = Path("E:\\seaborn_plot\\x.dwt")
    
    print(filename)
    
    filename_replace_ext = filename.with_suffix('.txt')
    
    print(filename_replace_ext)
    

    Expected results are printed out (as shown below) in winpython's ipython window output:

    E:\seaborn_plot\x.dwt

    E:\seaborn_plot\x.txt

    But when I look for a file with a renamed extension, the extension has not been changed, only the original file exists. I suspect windows file permissions.

  • Eryk Sun
    Eryk Sun over 5 years
    Path has rename and replace methods, e.g. filename.replace(filename.with_suffix('.txt')). For Unix-like behavior we want replace. In Windows, os.rename or Path.rename raises FileExistsError if the target exists. In Unix, rename will silently replace an existing target.
  • alejandro joya cruz
    alejandro joya cruz about 5 years
    even-though i name the way it does at unix, it behave the same while directory and user have permissions to replaced.