simple renaming files program

Chris Rebert clp2 at rebertia.com
Mon Aug 9 12:01:37 CEST 2010


On Mon, Aug 9, 2010 at 2:44 AM, blur959 <blur959 at hotmail.com> wrote:
> Hi, all, I am working on a simple program that renames files based on
> the directory the user gives, the names the user searched and the
> names the user want to replace. However, I encounter some problems.
> When I try running the script, when it gets to the os.rename part,
> there will be an error. The error is :
>  n = os.rename(file, file.replace(s, r))
> WindowsError: [Error 2] The system cannot find the file specified
>
> I attached my code below, hope you guys can help me, Thanks!
>
> import os
> directory = raw_input("input file directory")
> s = raw_input("search for name")
> r = raw_input("replace name")
>
> for file in os.listdir(directory):
>    n = os.rename(file, file.replace(s, r))
>    print n

os.rename() takes paths that are absolute (or possibly relative to the
cwd), not paths that are relative to some arbitrary directory (as
returned by os.listdir()).
Also, never name a variable "file"; it shadows the name of the built-in type.

Hence (untested):
from os import listdir, rename
from os.path import isdir, join
directory = raw_input("input file directory")
s = raw_input("search for name")
r = raw_input("replace name")

for filename in listdir(directory):
    path = join(directory, filename) #paste the directory name on
    if isdir(path): continue #skip subdirectories (they're not files)
    newname = filename.replace(s, r)
    newpath = join(directory, newname)
    n = rename(path, newpath)
    print n

Cheers,
Chris
--
http://blog.rebertia.com



More information about the Python-list mailing list