在python中重命名多个文件

时间:2010-12-05 12:12:46

标签: python

我想知道在python中使用re模块重命名多个文件的最简单方法是什么呢。

在我的目录中,他们是25个文件,所有文件名的格式为'唯一名称,后跟20个相同的字符.mkv'

我想要的是删除所有20个字符。

如果可能的话,我怎样才能使用Python:)

5 个答案:

答案 0 :(得分:6)

获取新名称:

>>> re.sub(r'.{20}(.mkv)', r'\1', 'unique12345678901234567890.mkv')
'unique.mkv'

或没有正则表达式:

>>> 'unique12345678901234567890.mkv'[:-24] + '.mkv'
'unique.mkv'

要重命名文件,请使用os.rename(old, new)http://docs.python.org/library/os.html#os.rename

要获取要重命名的文件列表,请使用glob.glob('*.mkv')http://docs.python.org/library/glob.html#glob.glob

把所有这些放在一起我们得到:

for filename in glob.glob('*.mkv'):
    if len(filename) > 24:
        os.rename(filename, filename[:-24] + '.mkv'

答案 1 :(得分:0)

由于您从字符串中容易识别的点切出特定数量的字符,re模块有点矫枉过正。您可以将新文件名准备为:

new_name = old_name.rsplit('.', 1)[0][:-20] + '.mkv'

要查找文件,请查找os.listdir(或者,如果您想以递归方式查看目录,os.walk),并重命名它们,请参阅os.rename

如果目录中还有其他.mkv不想重命名,re模块会很有用,因此您需要仔细检查以识别“目标”文件名。

答案 2 :(得分:0)

使用glob查找文件名,对字符串进行切片,然后使用os.rename()重命名。

答案 3 :(得分:0)

类似的东西:

>>> import os
>>> doIt = False
>>> for filename in ( x for x in os.listdir('.') if x.endswith('.mvk')):
...     newname = filename[:-24] + filename[-4:]
...     if doIt:
...         os.rename(filename,newname)
...         print "Renaming {0} to {1}".format(filename,newname)
...     else:
...         print "Would rename {0} to {1}".format(filename,newname)
...

操作文件时,总是有一个dryrun。将doIt更改为True,以实际移动文件。

答案 4 :(得分:-1)

您需要使用globos.rename。其余的,如果你想弄明白的话!

是的,这在Python中完全可行且容易实现。