python 在list中查找指定字符串的子串_Python:在字符串列表中查找子字符串

我有两个列表:songs是歌曲标题filenames列表,是通过运行生成的歌曲MP3文件列表os.listdir()。

songs = ['The Prediction', 'Life We Chose', 'Nastradamus', 'Some of Us Have Angels', 'Project Windows', 'Come Get Me', "Shoot 'em Up", 'Last Words', 'Family', 'God Love Us', 'Quiet Niggas', 'Big Girl', 'New World', 'You Owe Me', 'The Outcome']

每首歌都是unicode。

filenames = ['Nas - Big Girl.mp3', 'Nas - Come Get Me.mp3', 'Nas - God Love Us.mp3', 'Nas - Life We Chose.mp3', 'Nas - Nastradamus.mp3', 'Nas - New World.mp3', "Nas - Shoot 'Em Up.mp3", 'Nas - Some of Us Have Angels.mp3', 'Nas - The Outcome.mp3', 'Nas - The Prediction.mp3', 'Nas Feat. Bravehearts - Quiet Niggas.mp3', 'Nas Feat. Ginuwine - You Owe Me.mp3', 'Nas Feat. Mobb Deep - Family.mp3', 'Nas Feat. Nashawn - Last Words.mp3', 'Nas Feat. Ronald Isley - Project Windows.mp3']

每个文件名都是一个字符串。

我希望能够查看songs列表,如果列表中的一项与songs列表中的内容匹配filenames,请将该文件重命名为歌曲的名称。

解决方案

这是一个将保留文件扩展名的版本,无论它是什么,并且都会通过filenames在匹配后从数组中删除该文件名来避免两次对同一文件名进行匹配。它也不区分大小写:

for song in songs:

for i, filename in enumerate(filenames):

if song.upper() in filename.upper():

os.rename(filename, song + os.path.splitext(filename)[1])

del filenames[i]

break

您也可以首先循环访问文件名,但是然后问题可能是两个文件名与同一首歌曲匹配,rename第二个操作将引发错误。因此,在该设置中,最好将歌曲与文件名匹配后从歌曲列表中删除。


版权声明:本文为weixin_39946767原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。