有没有一种简单的方法来重命名目录中已经包含的一组文件,使用Python?
示例:我有一个满是*.doc文件的目录,我想以一致的方式重命名它们。
X.doc ->“(X).doc”
Y.doc ->“Y.doc(Y).doc”
发布于 2008-10-22 18:59:58
import glob, os
def rename(dir, pattern, titlePattern):
for pathAndFilename in glob.iglob(os.path.join(dir, pattern)):
title, ext = os.path.splitext(os.path.basename(pathAndFilename))
os.rename(pathAndFilename,
os.path.join(dir, titlePattern % title + ext))
然后您可以在示例中使用它,如下所示:
rename(r'c:\temp\xx', r'*.doc', r'new(%s)')
上面的示例将c:\temp\xx
目录中的所有*.doc
文件转换为new(%s).doc
,其中%s
是文件以前的基本名称(不带扩展名)。
发布于 2011-10-27 22:53:14
我更喜欢为我必须做的每个替换编写小的一行代码,而不是编写更通用和更复杂的代码。例如:
这会将当前目录中任何非隐藏文件中的所有下划线替换为连字符
import os
[os.rename(f, f.replace('_', '-')) for f in os.listdir('.') if not f.startswith('.')]
发布于 2008-10-22 19:30:06
如果你不介意使用正则表达式,那么这个函数将为你重命名文件提供强大的功能:
import re, glob, os
def renamer(files, pattern, replacement):
for pathname in glob.glob(files):
basename= os.path.basename(pathname)
new_filename= re.sub(pattern, replacement, basename)
if new_filename != basename:
os.rename(
pathname,
os.path.join(os.path.dirname(pathname), new_filename))
因此,在您的示例中,您可以这样做(假设它是文件所在的当前目录):
renamer("*.doc", r"^(.*)\.doc$", r"new(\1).doc")
但您也可以回滚到初始文件名:
renamer("*.doc", r"^new\((.*)\)\.doc", r"\1.doc")
还有更多。
https://stackoverflow.com/questions/225735
复制相似问题