Python os.rename and os.walk together

2020-02-12 07:11发布

问题:

I just wrote a python script to get rid of some annoying suffixes in filenames,

here's my code:

import os

for root, dirs, files in os.walk("path"):

    for filename in files:

        if filename.endswith("[AnnoyingTag].mov"):

            os.rename(filename, filename[:-18]+'.mov')

but I got the error in the last line:

OSError: [Errno 2] No such file or directory

I am pretty sure that I have the right path because I can print out all filenames correctly.

...really have no idea why this can't work.

Thanks for your answers

回答1:

You can replace

os.rename(filename, filename[:-18]+'.mov')

with

os.rename(root + os.sep + filename, root + os.sep + filename[:-18]+'.mov')


回答2:

The preferred way to join paths is to use os.path.join, change this line:

os.rename(filename, filename[:-18]+'.mov')

Replace it with this:

os.rename(os.path.join(root, filename), os.path.join(root, filename[:-18]+'.mov'))


回答3:

Fixed:

import os

for root, dirs, files in os.walk("path"):
    for filename in files:
        if filename.endswith("[AnnoyingTag].mov"):
            os.rename(root+'\\'+filename, root+'\\'+filename[:-18]+'.mov')

I think your problem is that the files you're renaming aren't in the current working directory.