我想知道使用Python中的re模块重命名多个文件的最简单方法,如果可能的话。
在我的目录中,有25个文件,所有文件名的格式都是“一个唯一的名称,后跟20个相同的字符.mkv”
我想要删除所有20个字符。
如果可能的话,如何使用Python实现这一点 :)
我想知道使用Python中的re模块重命名多个文件的最简单方法,如果可能的话。
在我的目录中,有25个文件,所有文件名的格式都是“一个唯一的名称,后跟20个相同的字符.mkv”
我想要删除所有20个字符。
如果可能的话,如何使用Python实现这一点 :)
获取新名称的方法:
>>> 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'
glob
查找文件名,切片字符串,并使用 os.rename()
重命名它们。由于您要从字符串中的特定位置剪切出一定数量的字符,因此使用re
模块有些过度。您可以将新文件名准备为:
new_name = old_name.rsplit('.', 1)[0][:-20] + '.mkv'
os.listdir
(或者,如果您想递归地查看目录,则为os.walk
),要重命名它们,请参见os.rename
。re
模块将非常有用,因此您需要进行更仔细的检查以识别“目标”文件名。类似于:
>>> 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)
...
在操作文件时,始终要进行干运行。将doIt
更改为True
,以实际移动文件。