gpt4 book ai didi

python - 批量搜索并用python替换文件名中的字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:00 25 4
gpt4 key购买 nike

我正在尝试编写一个小的 python 脚本,通过搜索和替换来重命名一堆文件名。例如:

原始文件名:MyMusic.Songname.Artist-mp3.iTunes.mp3

意向结果:歌曲名称.艺术家.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

我找了好久都没找到。非常感谢任何帮助!

谢谢!

最佳答案

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
  • 请注意,某些文件可能会被覆盖(因此丢失)如果两个名字在之后被缩减为相同的缩短名称坏词 已被删除。可以保留一组新的 fnames 并且在调用 os.rename 之前检查以防止丢失数据名称冲突。
  • fnmatch.translate采用 shell 样式模式并返回等效的正则表达式。上面用来转换badwords(例如 '.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())

关于python - 批量搜索并用python替换文件名中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7863464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com