Python 在mac上重命名一堆文件

Python 在mac上重命名一堆文件,python,linux,macos,Python,Linux,Macos,我想在mac上重命名一堆文件,我想知道是否有一个实用程序可以做到这一点,或者是否需要使用python之类的工具。以下是我要进行的重命名: 我想打电话,所以号码的形式是\d{3},即GM008.mp3。mac内部有没有办法做到这一点,或者最快的方法是什么?我目前正在做的是python中的一行程序: [os.rename(src, './GM' + src.split('GM')[1].split('.')[0].zfill(3) + '.mp3') for src in os.listdir('

我想在mac上重命名一堆文件,我想知道是否有一个实用程序可以做到这一点,或者是否需要使用python之类的工具。以下是我要进行的重命名:

我想打电话,所以号码的形式是
\d{3}
,即
GM008.mp3
。mac内部有没有办法做到这一点,或者最快的方法是什么?我目前正在做的是python中的一行程序:

[os.rename(src, './GM' + src.split('GM')[1].split('.')[0].zfill(3) + '.mp3') for src in os.listdir('.')]
# ['GM001.mp3', 'GM000.mp3', 'GM003.mp3', 'GM007.mp3', 'GM006.mp3', 'GM012.mp3', 'GM004.mp3', 'GM005.mp3', 'GM008.mp3', 'GM009.mp3', etc...]
编辑-更正您的问题后,我的答案可能不是最有用的,但我希望它能让您使用Automator:)

您可以在Mac中尝试像
Automator
,或
Apple Script
Automator
是内置的,您可以记录您的工作流程并将其转换为“脚本”。它很容易使用,就像拖放一样

启动automator时,选择应用程序,然后启动以下程序:

以下是一个例子:

编辑-更正您的问题后,我的答案可能不是最有用的,但我希望它能让您使用Automator:)

您可以在Mac中尝试像
Automator
,或
Apple Script
Automator
是内置的,您可以记录您的工作流程并将其转换为“脚本”。它很容易使用,就像拖放一样

启动automator时,选择应用程序,然后启动以下程序:

以下是一个例子:


我不确定这是否是这个问题的正确位置,但在任何情况下,下面的脚本都适用于您给出的确切格式。这应该很容易推广到使用稍微不同的名称<将代码>cd放入包含文件的目录中,然后运行以下脚本:

导入操作系统
对于os.listdir(“.”)中的文件名:
如果filename.endswith(“.mp3”):
不带前缀=文件名[:-4]
#在本例中,前缀='GM',num=数字
前缀,num=不带前缀[:2],不带前缀[2:]
new_name=f'{prefix}{num.zfill(3)}.mp3'
重命名(文件名,新名称)

我不确定这是否是这个问题的正确位置,但在任何情况下,以下脚本都适用于您给定的确切格式。这应该很容易推广到使用稍微不同的名称<将代码>cd放入包含文件的目录中,然后运行以下脚本:

导入操作系统
对于os.listdir(“.”)中的文件名:
如果filename.endswith(“.mp3”):
不带前缀=文件名[:-4]
#在本例中,前缀='GM',num=数字
前缀,num=不带前缀[:2],不带前缀[2:]
new_name=f'{prefix}{num.zfill(3)}.mp3'
重命名(文件名,新名称)

这应该很安全;我们正在寻找与您的mp3格式完全匹配的
GM\d+\.mp3
,并使用
zfill
.mp3
前面的数字填充为零<代码>操作系统与平台无关

import os
import re

for fname in [x for x in os.listdir(".") if re.fullmatch(r"GM\d+\.mp3", x)]:
    os.rename(fname, re.sub(r"(\d+)(?=\.mp3)", lambda x: x.group(1).zfill(3), fname))

这应该是相当安全的;我们正在寻找与您的mp3格式完全匹配的
GM\d+\.mp3
,并使用
zfill
.mp3
前面的数字填充为零<代码>操作系统与平台无关

import os
import re

for fname in [x for x in os.listdir(".") if re.fullmatch(r"GM\d+\.mp3", x)]:
    os.rename(fname, re.sub(r"(\d+)(?=\.mp3)", lambda x: x.group(1).zfill(3), fname))

os
是使用
os.rename(src,tgt)
的最佳选择-我没有mac,但它应该是一个不错的选择。考虑到您刚才分享的当前方法,问题是什么?它有用吗?你需要它来提高效率吗?另外,如果你只是把列表扔掉,只需要操作系统
os,那么使用列表comp是浪费内存的。重命名它的副作用是
。@ggorlen想知道我是否可以不用python来完成它。也就是说,如果在操作系统(甚至unix)中有一种方法可以在不编写脚本的情况下对一批文件进行重命名。我在OSX中发现了一个“批量重命名”,但据我所知,它不支持正则表达式。从你最初的问题来看,这对我来说并不明显。
os
os.rename(src,tgt)
的最佳选择-我没有mac,但它应该是个不错的选择。考虑到你刚才分享的当前方法,问题是什么?它有用吗?你需要它来提高效率吗?另外,如果你只是把列表扔掉,只需要操作系统
os,那么使用列表comp是浪费内存的。重命名它的副作用是
。@ggorlen想知道我是否可以不用python来完成它。也就是说,如果在操作系统(甚至unix)中有一种方法可以在不编写脚本的情况下对一批文件进行重命名。我在OSX中发现了一个“批量重命名”,但据我所知,它不支持正则表达式。从你最初的问题来看,这对我来说并不明显。@krzystztofk--谢谢,你能举一个例子说明如何使用上述内容吗?如果你只查找.mp3,请告诉我文件夹中是否有其他类型的文件?请尽可能多地指定…@Krzystztof_K--谢谢您的帮助,但实际上您甚至不需要automator,批量重命名可以直接在Finder中使用。但正如您所看到的,它不支持zfill(请尝试输入“001”),所以这里显示的这种方法不起作用。哦,实际上我看到了一个“让所有数字[]位数都变长……这可能有用。”@David542别担心,试试看!您可以创建“服务”(创建新的Automator文档类型时),然后只需选择所有文件,右键单击并从上下文菜单中选择“服务”。比运行python脚本快。@krysztofk我试过了,但似乎不支持正则表达式(至少在finder命令中是这样)。您的方法只是从1开始重命名它们,但如果该项以GM004开头会怎么样?@Krzystztof_K--谢谢,您能举一个例子说明如何使用上面的方法吗?如果您只查找.mp3,请告诉我文件夹中是否有其他类型的文件?请尽可能多地指定…@Krzystztof_K--谢谢你,但实际上你甚至不需要自动机,批量重命名i