I have tried to write this little script that will batch rename file extensions. I am passing three arguments, the directory where the files are located, the current extension, and the new extension.
The error I am getting is
python batch_file_rename_2.py c:\craig .txt .html
Traceback (most recent call last):
File "batch_file_rename_2.py", line 13, in <module>
os.rename(filename, newfile)
WindowsError: [Error 2] The system cannot find the file specified
The code is
import os
import sys
work_dir=sys.argv[1]
old_ext=sys.argv[2]
new_ext=sys.argv[3]
files = os.listdir(work_dir)
for filename in files:
file_ext = os.path.splitext(filename)[1]
if old_ext == file_ext:
newfile = filename.replace(old_ext, new_ext)
os.rename(filename, newfile)
os.listdir
returns only the filenames, not complete paths. Useos.path.join
to recreate the correct path:Problem is that
os.listdir
returns only filenames without path, you should use functionos.path.join
to joinwork_dir
andfilename
.And line
newfile = filename.replace(old_ext, new_ext)
looks very unsafe because it can replace not only extension but some unexpected parts of filename.You can replace file extension in more safe way using
os.path
functions,splitext
for example.You must specify fullname when you are not in the directory (you are not):