我想知道在python中使用re模块重命名多个文件的最简单方法是什么呢。
在我的目录中,他们是25个文件,所有文件名的格式为'唯一名称,后跟20个相同的字符.mkv'
我想要的是删除所有20个字符。
如果可能的话,我怎样才能使用Python:)
答案 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)