Renaming filenames using python

2019-06-05 11:05发布

I need to simply add the word "_Manual" onto the end of all the files i have in a specific directory Here is the script i am using at the moment - i have no experience with python so this script is a frankenstine of other scripts i had lying around!

It doesn't give any error messages but it also doesnt work..

folder = "C:\Documents and Settings\DuffA\Bureaublad\test"

import os, glob

for root, dirs, filenames in os.walk(folder):
    for filename in filenames:
        filename_split = os.path.splitext(filename) # filename and extensionname (extension in [1])
        filename_zero = filename_split[0]
        os.rename(filename_zero, filename_zero + "_manual")

I am now using

folder = "C:\Documents and Settings\DuffA\Bureaublad\test"
import os # glob is unnecessary
for root, dirs, filenames in os.walk(folder):
    for filename in filenames:
        fullpath = os.path.join(root, filename)
        filename_split = os.path.splitext(fullpath) # filename and extensionname (extension in [1])
        filename_zero, fileext = filename_split
        print fullpath, filename_zero + "_manual" + fileext
        os.rename(fullpath, filename_zero + "_manual" + fileext)

but it still doesnt work.. it doesnt print anything and nothing gets changed in the folder!

4条回答
不美不萌又怎样
2楼-- · 2019-06-05 11:27
for root, dirs, filenames in os.walk(folder):
    for filename in filenames:
        os.rename(os.path.join(root,filename),
                  os.path.join(root,'%s_manual%s' % os.path.splitext(filename)))

you should add a control in your code, to verify that the filename to rename hasn't already '_manual' in its string name

查看更多
Juvenile、少年°
3楼-- · 2019-06-05 11:35

os.rename requires a source and destination filename. The variable filename contains your current filename (e.g., "something.txt"), whereas your split separates that into something and txt. As the source file to rename, you then only specify something, which fails silently.

Instead, you want to rename the file given in filename, but as you walk into subfolders as well, you need to make sure to use the absolute path. For this you can use os.path.join(root, filename).

So in the end you get something like this:

os.rename(os.path.join(root, filename), 
  os.path.join(root, filename_zero + "_manual" + filename_split[1]))

This would rename dir1/something.txt into dir1/something_manual.txt.

查看更多
霸刀☆藐视天下
4楼-- · 2019-06-05 11:36
folder = r"C:\Documents and Settings\DuffA\Bureaublad\test"

import os, glob

for root, dirs, filenames in os.walk(folder):
    for filename in filenames:
        filename_split = os.path.splitext(filename) # filename and extensionname (extension in [1])
        filename_zero = filename_split[0]
        os.rename(os.path.join(root, filename), os.path.join(root, filename_zero + "_manual" + filename_split[1]))

In your code, you are trying to rename filename_zero, which is the filename without extension and therefore does not exist as a real path. You have to specify the full path to os.rename like above.

查看更多
劳资没心,怎么记你
5楼-- · 2019-06-05 11:50

I. e. it does nothing? Let's see:

folder = "C:\Documents and Settings\DuffA\Bureaublad\test"

import os # glob is unnecessary

for root, dirs, filenames in os.walk(folder):
    for filename in filenames:
        fullpath = os.path.join(root, filename)
        filename_split = os.path.splitext(fullpath) # filename and extensionname (extension in [1])
        filename_zero, fileext = filename_split
        os.rename(fullpath, filename_zero + "_manual" + fileext)

might do the trick, as you have to work with the full path. but I don't understand why there was no exception when the files could not be found...


EDIT to put the change to a more prominent place:

You as well seem to have your path wrong.

Use

folder = r"C:\Documents and Settings\DuffA\Bureaublad\test"

to prevent that the \t is turned into a tab character.

查看更多
登录 后发表回答