Python os.rename and os.walk together

2020-02-12 06:52发布

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

3条回答
不美不萌又怎样
2楼-- · 2020-02-12 07:20

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楼-- · 2020-02-12 07:41

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.

查看更多
做自己的国王
4楼-- · 2020-02-12 07:44

You can replace

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

with

os.rename(root + os.sep + filename, root + os.sep + filename[:-18]+'.mov')
查看更多
登录 后发表回答