使用Python删除多个文件名中的数字和空格

2024-10-01 09:29:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试重命名文件夹中的多个mp3文件。他们从“加州1号酒店-老鹰”之类的开始。我希望它只是“加州鹰酒店”。 另外,可能还有一个“05加州酒店-老鹰”,这意味着从不同的文件中删除号码会产生重复,这是我面临的问题。我想要它替换现有的文件/覆盖/删除其中的一个或任何解决方案。 P、 在“1234567890”中添加“3”将从.mp3扩展名中删除“3”

我不熟悉python,但下面是我用来实现它的代码

    import os


    def renamefiles():

        list = os.listdir(r"E:\NEW")
        print(list)
        path = os.getcwd()
        print(path)
        os.chdir(r"E:\NEW")
        for name in list:
            os.rename(name, name.translate(None, "124567890 "))
        os.chdir(path)

    renamefiles()

这是我得到的错误 WindowsError:[Error 183]如果文件已存在,则无法创建该文件

任何关于如何正确重命名文件的帮助将不胜感激!在


Tags: 文件pathname文件夹newos解决方案酒店
3条回答

而不是使用名称.翻译,导入re-lib(正则表达式)并使用类似

"(?:\d*)?\s*(.+?).mp3"

作为你的模式。然后你可以使用

^{pr2}$

作为你的改名。在

对于处理多个文件,请添加一个if语句,该语句检查该文件是否已存在于库中,如下所示:

os.path.exists(dirpath)

其中dirpath是要签入的目录

您可以捕获OSError,也可以使用glob来查找.mp3文件:

import os
from glob import iglob

def renamefiles(pth):
    os.chdir(pth)
    for name in iglob("*.mp3"):
        try:
            os.rename(name, name.translate(None, "124567890").lstrip())
        except OSError:
            print("Caught error for {}".format(name))
            # os.remove(name) ?

当你发现错误时,你应该怎么做取决于你自己,你可以保存一些找到的名字的记录,并为每个名字增加一个计数,或者保持原样。在

如果数字总是在开头,你也可以直接删除,这样你就可以安全地使用3:

^{pr2}$

使用示例字符串之一:

In [2]: "05 Hotel California - The Eagles.mp3".lstrip("01234567890 ")
Out[2]: 'Hotel California - The Eagles.mp3'

使用原始方法无法像删除所有空间那样按预期工作:

In [3]: "05 Hotel California - The Eagles.mp3".translate(None,"0124567890 ")
Out[3]: 'HotelCalifornia-TheEagles.mp3'

如果不在乎哪个文件被覆盖,可以使用shutil.move

import os
from glob import iglob
from shutil import move

def renamefiles(pth):
    os.chdir(pth)
    for name in iglob("*.mp3"):
        move(name, name.translate(None, "124567890").lstrip())

另一方面,不要使用list作为变量名。在

您需要验证所更改的名称是否确实更改了。如果名称中没有数字或空格,translate将返回相同的字符串,您将尝试将name重命名为name,而Windows拒绝该字符串。尝试:

for name in list:
    newname = name.translate(None, "124567890 ")
    if name != newname:
        os.rename(name, newname)

注意,如果文件目标存在,这仍然会失败,如果您意外地将两个名称合并为一个,您可能会希望这样做。但是如果您想要静默替换行为,如果您使用的是python3.3或更高版本,可以将os.rename更改为os.replace以静默重写;在早期的Python中,可以在调用os.rename之前显式地os.remove。在

相关问题 更多 >