Rename multiple files in a directory in Python [du

2019-01-01 06:21发布

This question already has an answer here:

I'm trying to rename some files in a directory using Python.

Say I have a file called CHEESE_CHEESE_TYPE.*** and want to remove CHEESE_ so my resulting filename would be CHEESE_TYPE

I'm trying to use the os.path.split but it's not working properly. I have also considered using string manipulations, but have not been successful with that either.

15条回答
听够珍惜
2楼-- · 2019-01-01 06:39

This sort of stuff is perfectly fitted for IPython, which has shell integration.

In [1] files = !ls
In [2] for f in files:
           newname = process_filename(f)
           mv $f $newname

Note: to store this in a script, use the .ipy extension, and prefix all shell commands with !.

See also: http://ipython.org/ipython-doc/stable/interactive/shell.html

查看更多
长期被迫恋爱
3楼-- · 2019-01-01 06:40

This command will remove the initial "CHEESE_" string from all the files in the current directory, using renamer:

$ renamer --find "/^CHEESE_/" *
查看更多
路过你的时光
4楼-- · 2019-01-01 06:44

import os import string def rename_files():

#List all files in the directory
file_list = os.listdir("/Users/tedfuller/Desktop/prank/")
print(file_list)

#Change current working directory and print out it's location
working_location = os.chdir("/Users/tedfuller/Desktop/prank/")
working_location = os.getcwd()
print(working_location)

#Rename all the files in that directory
for file_name in file_list:
    os.rename(file_name, file_name.translate(str.maketrans("","",string.digits)))

rename_files()

查看更多
不流泪的眼
5楼-- · 2019-01-01 06:48

Try this:

import os
import shutil

for file in os.listdir(dirpath):
    newfile = os.path.join(dirpath, file.split("_",1)[1])
    shutil.move(os.path.join(dirpath,file),newfile)

I'm assuming you don't want to remove the file extension, but you can just do the same split with periods.

查看更多
素衣白纱
6楼-- · 2019-01-01 06:49

Here is a more general solution:

This code can be used to remove any particular character or set of characters recursively from all filenames within a directory and replace them with any other character, set of characters or no character.

import os

paths = (os.path.join(root, filename)
        for root, _, filenames in os.walk('C:\FolderName')
        for filename in filenames)

for path in paths:
    # the '#' in the example below will be replaced by the '-' in the filenames in the directory
    newname = path.replace('#', '-')
    if newname != path:
        os.rename(path, newname)
查看更多
宁负流年不负卿
7楼-- · 2019-01-01 06:51

I have the same issue, where I want to replace the white space in any pdf file to a dash -. But the files were in multiple sub-directories. So, I had to use os.walk(). In your case for multiple sub-directories, it could be something like this:

import os
for dpath, dnames, fnames in os.walk('/path/to/directory'):
    for f in fnames:
        os.chdir(dpath)
        if f.startswith('cheese_'):
            os.rename(f, f.replace('cheese_', ''))
查看更多
登录 后发表回答