Python 重命名多个文件
因此,我尝试使用集合重命名来重命名文件列表,如下所示:Python 重命名多个文件,python,Python,因此,我尝试使用集合重命名来重命名文件列表,如下所示: 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"
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]没有这样的文件或目录(文件在目录中)
所以接下来我试着
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
,因此一旦重命名文件它就过时)=>一些源文件找不到
在“多次传递”中执行此操作时,会对某些文件应用多次重命名
这可能会起作用(而且更加紧凑):
基本上,如果一个文件不存在,我不会重命名它(这意味着它已经在以前的迭代中被重命名)。所以只有一种可能的重命名。您只需对哪一个进行优先级排序。多遍重命名有效而单遍重命名并不意味着您的某些文件包含
0001
模式以及0002
模式
因此,当只执行一个循环时,您正在重命名文件,但您得到了旧的文件列表(listdir
返回一个list
,因此一旦重命名文件它就过时)=>一些源文件找不到
在“多次传递”中执行此操作时,会对某些文件应用多次重命名
这可能会起作用(而且更加紧凑):
基本上,如果一个文件不存在,我不会重命名它(这意味着它已经在以前的迭代中被重命名)。所以只有一种可能的重命名。您只需对哪一个进行优先级排序。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)
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)
您正在尝试将名为
0001
的文件重命名为0016.5
,将名为0002
的文件重命名为00041
等等,还是执行其他操作?您将按顺序重命名同一文件。当然,在第一次重命名后,原始文件不再存在,因此出现了错误。假设当您访问0004
时,您的剩余文件比提供的要多,因为0003
重命名为00042
,因此包含0004
,您是否尝试将名为0001
的文件重命名为0016.5
,将名为0002
的文件重命名为00041
,依此类推,或者执行其他操作?按顺序重命名同一文件。当然,在第一次重命名后,原始文件不再存在,因此会出现错误。假设重新命名的文件比到达0004
时提供的文件多,则会有更多,因为0003
重命名为00042
,因此包含0004