Swapping One File Extension for Another Throughout a Directory Tree
Credit: Julius Welby
Problem
You need to rename files throughout a subtree of directories, specifically changing the names of all files with a given extension so that they end in another extension.
Solution
Operating throughout a subtree of directories is easy enough, with
the
os.path.walk function from
Python’s standard library:
import os, string
def swapextensions(dir, before, after):
if before[:1]!='.': before = '.'+before
if after[:1]!='.': after = '.'+after
os.path.walk(dir, callback, (before, -len(before), after))
def callback((before, thelen, after), dir, files):
for oldname in files:
if oldname[thelen:]==before:
oldfile = os.path.join(dir, oldname)
newfile = oldfile[:thelen] + after
os.rename(oldfile, newfile)
if _ _name_ _=='_ _main_ _':
import sys
if len(sys.argv) != 4:
print "Usage: swapext rootdir before after"
sys.exit(100)
swapextensions(sys.argv[1], sys.argv[2], sys.argv[3])Discussion
This recipe shows how to change the file extensions of (i.e., rename) all files in a specified directory, all of its subdirectories, all of their subdirectories, and so on. This technique is useful for changing the extensions of a whole batch of files in a folder structure, such as a web site. You can also use it to correct errors made when saving a batch of files programmatically.
The recipe is usable either as a module, to be imported from any other, or as a script to run from the command line, and it is carefully coded ...