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