Credit: Julius Welby
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.
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])
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 to be platform-independent and compatible with old versions of Python as well as newer ones. You can pass in the extensions either with or without the leading dot (.), since the code in this recipe will insert that dot if necessary.
The author’s web page at http://www.outwardlynormal.com/python/swapextensions.htm.