[英]Renaming multiple files
所以我正在尝试使用set重命名来重命名文件列表,如下所示:
import os
import time
for fileName in os.listdir("."):
os.rename(fileName, fileName.replace("0001", "00016.5"))
os.rename(fileName, fileName.replace("0002", "00041"))
os.rename(fileName, fileName.replace("0003", "00042"))
...
但这给了我这个错误os.rename(fileName, fileName.replace("0002", "00041"))``OSError: [Errno 2] No such file ordirectory
(该文件在目录中)
所以接下来我尝试了
import os
import time
for fileName in os.listdir("."):
os.rename(fileName, fileName.replace("0001", "00016.5"))
for fileName in os.listdir("."):
os.rename(fileName, fileName.replace("0002", "00041"))
for fileName in os.listdir("."):
os.rename(fileName, fileName.replace("0003", "00042"))
...
但这很奇怪地重命名了文件,并带有很多额外的字符,我在这里做错了什么?
多遍重命名在单遍重命名时有效的事实并不意味着您的某些文件包含0001
和0002
模式。
因此,仅执行一个循环时,您将重命名文件,但是会得到旧的文件列表( listdir
返回一个list
,因此在重命名文件后它就已经过时了)=>找不到某些源文件。
多遍处理时,您要对某些文件应用多个重命名。
那可以工作(并且更紧凑):
for fileName in os.listdir("."):
for before,after in (("0001", "00016.5"),("0002", "00041"),("0003", "00042")):
if os.path.exists(fileName):
newName = fileName.replace(before,after)
# file hasn't been renamed: rename it (only if different)
if newName != fileName:
os.rename(fileName,newName)
基本上,如果文件不存在,我就不会对其进行重命名(这意味着该文件已在先前的迭代中被重命名)。 因此,只有一种重命名的可能。 您只需要确定哪个优先级即可。
listdir返回所有对象的名称(文件,目录等),而不是完整路径。 您可以使用os.path.join()构造完整路径。 您的for循环重命名,所有找到的对象先到00016.5,然后到00041 ...
重命名文件的一种方法可以是:
import os
import time
currentDir = os.pathdirname(__file__)
for fileName in os.listdir(currentDir):
if '0001' in fileName:
oldPath = os.path.join(currentDir, fileName)
newPath = os.path.join(currentDir, fileName.replace("0001", "00016.5"))
elif '0002' in fileName:
oldPath = os.path.join(currentDir, fileName)
newPath = os.path.join(currentDir, fileName.replace("0002", "00041"))
else:
continue
os.rename(oldPath, newPath)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.