[英]batch search and replace strings in filenames with python
我正在尝试编写一个小的python脚本,通过搜索和替换来重命名一堆文件名。 例如:
原始文件名:MyMusic.Songname.Artist-mp3.iTunes.mp3
结果:Songname.Artist.mp3
到目前为止我得到的是:
#!/usr/bin/env python
from os import rename, listdir
mustgo = "MyMusic."
filenames = listdir('.')
for fname in fnames:
if fname.startswith(mustgo):
rename(fname, fname.replace(mustgo, '', 1))
(据我记忆,从这个网站得到它)
无论如何,这只会在开头摆脱String,而不是文件名中的那些。
另外我想使用一个单独的文件(例如badwords.txt),其中包含应该搜索和替换的所有字符串,以便我可以更新它们而无需编辑整个代码。
Content of badwords.txt
MyMusic.
-mp3
-MP3
.iTunes
.itunes
我一直在寻找相当长的一段时间,但还没找到任何东西。 非常感谢任何帮助!
谢谢!
import fnmatch
import re
import os
with open('badwords.txt','r') as f:
pat='|'.join(fnmatch.translate(badword)[:-1] for badword in
f.read().splitlines())
for fname in os.listdir('.'):
new_fname=re.sub(pat,'',fname)
if fname != new_fname:
print('{o} --> {n}'.format(o=fname,n=new_fname))
os.rename(fname, new_fname)
# MyMusic.Songname.Artist-mp3.iTunes.mp3 --> Songname.Artist.mp3
badwords
后两个名称缩小为相同的缩写名称,则某些文件可能会被覆盖(并因此丢失)。 可以在调用os.rename
之前保留并检查一组新的fname,以防止由于名称冲突而丢失数据。 '.iTunes'
(例如'.iTunes'
)转换为正则表达式(例如r'\\.iTunes'
)。 您的badwords列表似乎表明您要忽略大小写。 您可以通过在pat
的开头添加'(?i)'
来忽略大小写:
with open('badwords.txt','r') as f: pat='(?i)'+'|'.join(fnmatch.translate(badword)[:-1] for badword in f.read().splitlines())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.