如何重命名与正则表达式匹配的每个文件?
How can I rename every file that matches a regex?
我想将 xyz.ogg.mp3
形式的文件名重命名为 xyz.mp3
。
我有一个在每个文件中查找 .ogg
的正则表达式,然后它将 .ogg
替换为空字符串,但我收到以下错误:
Traceback (most recent call last):
File ".\New Text Document.py", line 7, in <module>
os.rename(files, '')
TypeError: rename() argument 1 must be string, not _sre.SRE_Match
这是我尝试过的:
for file in os.listdir("./"):
if file.endswith(".mp3"):
files = re.search('.ogg', file)
os.rename(files, '')
如何让这个循环查找每个文件中的每个 .ogg
然后用空字符串替换它?
文件结构如下所示:audiofile.ogg.mp3
你可以这样做:
for file in os.listdir("./"):
if file.endswith(".mp3") and '.ogg' in file:
os.rename(file, file.replace('.ogg',''))
编写命令行会快得多:
rename 's/\.ogg//' *.ogg.mp3
(perl 的重命名)
一个使用 Python 3's pathlib
的示例(但不是正则表达式,因为它对所述问题有点矫枉过正):
from pathlib import Path
for path in Path('.').glob('*.mp3'):
if '.ogg' in path.stem:
new_name = path.name.replace('.ogg', '')
path.rename(path.with_name(new_name))
一些注意事项:
Path('.')
给你一个 Path
指向当前工作目录的对象
Path.glob()
递归搜索, *
有一个通配符(所以你得到任何以 .mp3
结尾的东西)
Path.stem
为您提供减去扩展名的文件名(因此,如果您的路径是 /foo/bar/baz.bang
,则主干将是 baz
)
我想将 xyz.ogg.mp3
形式的文件名重命名为 xyz.mp3
。
我有一个在每个文件中查找 .ogg
的正则表达式,然后它将 .ogg
替换为空字符串,但我收到以下错误:
Traceback (most recent call last):
File ".\New Text Document.py", line 7, in <module>
os.rename(files, '')
TypeError: rename() argument 1 must be string, not _sre.SRE_Match
这是我尝试过的:
for file in os.listdir("./"):
if file.endswith(".mp3"):
files = re.search('.ogg', file)
os.rename(files, '')
如何让这个循环查找每个文件中的每个 .ogg
然后用空字符串替换它?
文件结构如下所示:audiofile.ogg.mp3
你可以这样做:
for file in os.listdir("./"):
if file.endswith(".mp3") and '.ogg' in file:
os.rename(file, file.replace('.ogg',''))
编写命令行会快得多:
rename 's/\.ogg//' *.ogg.mp3
(perl 的重命名)
一个使用 Python 3's pathlib
的示例(但不是正则表达式,因为它对所述问题有点矫枉过正):
from pathlib import Path
for path in Path('.').glob('*.mp3'):
if '.ogg' in path.stem:
new_name = path.name.replace('.ogg', '')
path.rename(path.with_name(new_name))
一些注意事项:
Path('.')
给你一个Path
指向当前工作目录的对象Path.glob()
递归搜索,*
有一个通配符(所以你得到任何以.mp3
结尾的东西)Path.stem
为您提供减去扩展名的文件名(因此,如果您的路径是/foo/bar/baz.bang
,则主干将是baz
)