重命名Python中的目录多个文件[复制]重命名Python中的目录多个文件[复制](Rename

2019-05-10 10:16发布

这个问题已经在这里有一个答案:

  • 如何使用Python重命名文件 10个回答
  • 重命名多个文件在Python 4个回答

我试图重命名使用Python目录中的一些文件。

说我有一个名为CHEESE_CHEESE_TYPE.***并希望删除CHEESE_所以我得到的文件名会CHEESE_TYPE

我试图用os.path.split ,但它不能正常工作。 我一直在使用字符串操作也考虑过,但都没有成功与任。

Answer 1:

使用os.rename(src, dst)重命名或移动文件或目录。

$ ls
cheese_cheese_type.bar  cheese_cheese_type.foo
$ python
>>> import os
>>> for filename in os.listdir("."):
...  if filename.startswith("cheese_"):
...    os.rename(filename, filename[7:])
... 
>>> 
$ ls
cheese_type.bar  cheese_type.foo


Answer 2:

以下是根据您的最新评论的脚本。

#!/usr/bin/env python
from os import rename, listdir

badprefix = "cheese_"
fnames = listdir('.')

for fname in fnames:
    if fname.startswith(badprefix*2):
        rename(fname, fname.replace(badprefix, '', 1))


Answer 3:

下面的代码应该工作。 这需要在当前目录中的所有文件名,如果文件名包含模式CHEESE_CHEESE_那么它被重新命名。 如果不是不采取措施的文件名。

import os
for fileName in os.listdir("."):
    os.rename(fileName, fileName.replace("CHEESE_CHEESE_", "CHEESE_"))


Answer 4:

假设你已经在目录中,并认为“前8个字符”,从您的评论保持为真永远。 (虽然“CHEESE_”是7个字符...?如果是这样,改变8下方7)

from glob import glob
from os import rename
for fname in glob('*.prj'):
    rename(fname, fname[8:])


Answer 5:

我有同样的问题,在这里我想更换空白 在任何PDF文件到一个破折号- 但这些文件是在多个子目录。 所以,我只好用os.walk() 根据你的情况为多个子目录,它可能是这样的:

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_', ''))


Answer 6:

试试这个:

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)

我假设你不想删除的文件扩展名,但你可以做周期相同的分裂。



Answer 7:

这种东西是完全安装用于进行IPython中,其中有壳一体化。

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

注意:这些信息存储在一个脚本,使用.ipy延伸,并与前缀的所有shell命令!

参见: http://ipython.org/ipython-doc/stable/interactive/shell.html



Answer 8:

看来你的问题更多的是确定新的文件名,而不是重命名本身(您可以使用os.rename方法)。

它不是从你的问题不清楚的图案是什么,你希望被重命名。 没有什么错与字符串操作。 正则表达式可能是你需要在这里。



Answer 9:

这里是一个更通用的解决方案:

此代码可用于一个目录内去除任何特定的字符或从所有文件名字符集合递归和与任何其它字符,字符集或没有字符的替换它们。

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)


Answer 10:

此命令将在当前目录下的所有文件删除初始 “CHEESE_”的字符串,用重命名 :

$ renamer --find "/^CHEESE_/" *


Answer 11:

您可以使用使用os.system功能简单和调用的bash来完成任务:

import os
os.system('mv old_filename new_filename')


Answer 12:

我本来想找一些GUI,这将允许使用正则表达式重命名和有结果的预览应用更改之前。

在Linux上我已经成功地使用krename ,在Windows上的Total Commander确实与正则表达式重命名,但我发现OSX没有像样的免费相等的,所以我最后写一个python脚本,它的工作原理递归,默认情况下只打印了新的文件名,而无需进行任何变化。 添加“-w”开关实际修改文件名。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import fnmatch
import sys
import shutil
import re


def usage():
    print """
Usage:
        %s <work_dir> <search_regex> <replace_regex> [-w|--write]

        By default no changes are made, add '-w' or '--write' as last arg to actually rename files
        after you have previewed the result.
        """ % (os.path.basename(sys.argv[0]))


def rename_files(directory, search_pattern, replace_pattern, write_changes=False):

    pattern_old = re.compile(search_pattern)

    for path, dirs, files in os.walk(os.path.abspath(directory)):

        for filename in fnmatch.filter(files, "*.*"):

            if pattern_old.findall(filename):
                new_name = pattern_old.sub(replace_pattern, filename)

                filepath_old = os.path.join(path, filename)
                filepath_new = os.path.join(path, new_name)

                if not filepath_new:
                    print 'Replacement regex {} returns empty value! Skipping'.format(replace_pattern)
                    continue

                print new_name

                if write_changes:
                    shutil.move(filepath_old, filepath_new)
            else:
                print 'Name [{}] does not match search regex [{}]'.format(filename, search_pattern)

if __name__ == '__main__':
    if len(sys.argv) < 4:
        usage()
        sys.exit(-1)

    work_dir = sys.argv[1]
    search_regex = sys.argv[2]
    replace_regex = sys.argv[3]
    write_changes = (len(sys.argv) > 4) and sys.argv[4].lower() in ['--write', '-w']
    rename_files(work_dir, search_regex, replace_regex, write_changes)

实施例用例

我想翻转文件名部分按以下方式,即移动位m7-08到文件名的开头:

# Before:
Summary-building-mobile-apps-ionic-framework-angularjs-m7-08.mp4

# After:
m7-08_Summary-building-mobile-apps-ionic-framework-angularjs.mp4

这将进行试运行,并没有实际重命名的文件打印新的文件名:

rename_files_regex.py . "([^\.]+?)-(m\\d+-\\d+)" "\\2_\\1"

这将做实际的重命名(您可以使用-w--write ):

rename_files_regex.py . "([^\.]+?)-(m\\d+-\\d+)" "\\2_\\1" --write


Answer 13:

进口OS进口串高清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()



Answer 14:

那这个呢 :

import re
p = re.compile(r'_')
p.split(filename, 1) #where filename is CHEESE_CHEESE_TYPE.***


Answer 15:

这对我的作品。

import os
for afile in os.listdir('.'):
    filename, file_extension = os.path.splitext(afile)
    if not file_extension == '.xyz':
        os.rename(afile, filename + '.abc')


文章来源: Rename multiple files in a directory in Python [duplicate]