How to rename a file using Python

PythonFile Rename

Python Problem Overview


I want to change a.txt to b.kml.

Python Solutions


Solution 1 - Python

Use os.rename:

import os

os.rename('a.txt', 'b.kml')'

Usage:

os.rename('from.extension.whatever','to.another.extension')

Solution 2 - Python

File may be inside a directory, in that case specify the path:

import os
old_file = os.path.join("directory", "a.txt")
new_file = os.path.join("directory", "b.kml")
os.rename(old_file, new_file)

Solution 3 - Python

As of Python 3.4 one can use the pathlib module to solve this.

If you happen to be on an older version, you can use the backported version found here

Let's assume you are not in the root path (just to add a bit of difficulty to it) you want to rename, and have to provide a full path, we can look at this:

some_path = 'a/b/c/the_file.extension'

So, you can take your path and create a Path object out of it:

from pathlib import Path
p = Path(some_path)

Just to provide some information around this object we have now, we can extract things out of it. For example, if for whatever reason we want to rename the file by modifying the filename from the_file to the_file_1, then we can get the filename part:

name_without_extension = p.stem

And still hold the extension in hand as well:

ext = p.suffix

We can perform our modification with a simple string manipulation:

Python 3.6 and greater make use of f-strings!

new_file_name = f"{name_without_extension}_1"

Otherwise:

new_file_name = "{}_{}".format(name_without_extension, 1)

And now we can perform our rename by calling the rename method on the path object we created and appending the ext to complete the proper rename structure we want:

p.rename(Path(p.parent, new_file_name + ext))

More shortly to showcase its simplicity:

Python 3.6+:

from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, f"{p.stem}_1_{p.suffix}"))

Versions less than Python 3.6 use the string format method instead:

from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, "{}_{}_{}".format(p.stem, 1, p.suffix))

Solution 4 - Python

import shutil

shutil.move('a.txt', 'b.kml')

This will work to rename or move a file.

Solution 5 - Python

os.rename(old, new)

This is found in the Python docs: http://docs.python.org/library/os.html

Solution 6 - Python

Use os.rename. But you have to pass full path of both files to the function. If I have a file a.txt on my desktop so I will do and also I have to give full of renamed file too.

os.rename('C:\\Users\\Desktop\\a.txt', 'C:\\Users\\Desktop\\b.kml')

Solution 7 - Python

As of Python version 3.3 and later, it is generally preferred to use os.replace instead of os.rename so FileExistsError is not raised if the destination file already exists.

assert os.path.isfile('old.txt')
assert os.path.isfile('new.txt')

os.rename('old.txt', 'new.txt')
# Raises FileExistsError
os.replace('old.txt', 'new.txt')
# Does not raise exception

assert not os.path.isfile('old.txt')
assert os.path.isfile('new.txt')

See the documentation.

Solution 8 - Python

One important point to note here, we should check if any files exists with the new filename.

suppose if b.kml file exists then renaming other file with the same filename leads to deletion of existing b.kml.

import os

if not os.path.exists('b.kml'):
    os.rename('a.txt','b.kml')

Solution 9 - Python

import os

# Set the path
path = 'a\\b\\c'  
# save current working directory
saved_cwd = os.getcwd()
# change your cwd to the directory which contains files
os.chdir(path)
os.rename('a.txt', 'b.klm')
# moving back to the directory you were in 
os.chdir(saved_cwd)

Solution 10 - Python

Using the Pathlib library's Path.rename instead of os.rename:

import pathlib

original_path = pathlib.Path('a.txt')
new_path = original_path.rename('b.kml')

Solution 11 - Python

Here is an example using pathlib only without touching os which changes the names of all files in a directory, based on a string replace operation without using also string concatenation:

from pathlib import Path

path = Path('/talend/studio/plugins/org.talend.designer.components.bigdata_7.3.1.20200214_1052\components/tMongoDB44Connection')

for p in path.glob("tMongoDBConnection*"):
    new_name = p.name.replace("tMongoDBConnection", "tMongoDB44Connection")
    new_name = p.parent/new_name
    p.rename(new_name)

Solution 12 - Python

import shutil
import os

files = os.listdir("./pics/") 

for key in range(0, len(files)):
   print files[key]
   shutil.move("./pics/" + files[key],"./pics/img" + str(key) + ".jpeg")

This should do it. python 3+

Solution 13 - Python

If you are Using Windows and you want to rename your 1000s of files in a folder then: You can use the below code. (Python3)

import os

path = os.chdir(input("Enter the path of the Your Image Folder :  ")) #Here put the path of your folder where your images are stored

image_name = input("Enter your Image name : ") #Here, enter the name you want your images to have

i = 0

for file in os.listdir(path):

	new_file_name = image_name+"_" + str(i) + ".jpg" #here you can change the extention of your renmamed file.
	os.rename(file,new_file_name)

	i = i + 1

input("Renamed all Images!!")

Solution 14 - Python

A quick way to rename and keep the format is using pathlib. Ex change a.z => c.z

>>> from pathlib import Path
>>> a = Path('abc/ss/d/a.z')
>>> suffix = a.suffix
>>> a.with_name('c.random_suffix').with_suffix(suffix)
PosixPath('abc/ss/d/c.z')

Solution 15 - Python

os.chdir(r"D:\Folder1\Folder2")
os.rename(src,dst)
#src and dst should be inside Folder2

Solution 16 - Python

import os
import re
from pathlib import Path

for f in os.listdir(training_data_dir2):
  for file in os.listdir( training_data_dir2 + '/' + f):
    oldfile= Path(training_data_dir2 + '/' + f + '/' + file)
    newfile = Path(training_data_dir2 + '/' + f + '/' + file[49:])
    p=oldfile
    p.rename(newfile)

Solution 17 - Python

You can use os.system to invoke terminal to accomplish the task:

os.system('mv oldfile newfile')

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionzjm1126View Question on Stackoverflow
Solution 1 - PythonYOUView Answer on Stackoverflow
Solution 2 - PythonAbdul RazakView Answer on Stackoverflow
Solution 3 - PythonidjawView Answer on Stackoverflow
Solution 4 - PythonAndy BalaamView Answer on Stackoverflow
Solution 5 - PythonJoeView Answer on Stackoverflow
Solution 6 - PythonlonewolfView Answer on Stackoverflow
Solution 7 - PythonChris CollettView Answer on Stackoverflow
Solution 8 - PythonLohithView Answer on Stackoverflow
Solution 9 - PythonTilak M DivakarView Answer on Stackoverflow
Solution 10 - PythonkymView Answer on Stackoverflow
Solution 11 - Pythongil.fernandesView Answer on Stackoverflow
Solution 12 - PythonNaveenView Answer on Stackoverflow
Solution 13 - PythonKhan SaadView Answer on Stackoverflow
Solution 14 - Pythondtlam26View Answer on Stackoverflow
Solution 15 - Pythonsauravjoshi23View Answer on Stackoverflow
Solution 16 - PythonissamView Answer on Stackoverflow
Solution 17 - Pythonuser5449023View Answer on Stackoverflow