我正在尝试编写一个小的python脚本,通过搜索和替换来重命名一堆文件名。例如:
原始文件名: MyMusic.Songname.Artist-mp3.iTunes.mp3
Intendet结果: 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))
(据我所知,从这个网站得到了它)
无论如何,这只会在开头删除字符串,而不是文件名中的字符串。
此外,我想使用一个单独的文件(例如badwords.txt),其中包含应搜索和替换的所有字符串,以便我可以更新它们,而无需编辑整个代码。
Content of badwords.txt
MyMusic.
-mp3
-MP3
.iTunes
.itunes
我一直在寻找相当长的一段时间,但还没找到任何东西。非常感谢任何帮助!
谢谢!
答案 0 :(得分:3)
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
已被删除。可以保留一组新的fnames
在调用os.rename
之前检查以防止丢失数据
名称冲突。'.iTunes'
)到正则表达式(例如r'\.iTunes'
)。 你的坏词列表似乎表明你想忽略大小写。您
可以通过将'(?i)'
添加到pat
的开头来忽略大小写:
with open('badwords.txt','r') as f:
pat='(?i)'+'|'.join(fnmatch.translate(badword)[:-1] for badword in
f.read().splitlines())