我正在尝试从文件名中提取电影元数据(标题和年份)。
名称模式不是标准的,但也不是随机的,所以我试图涵盖尽可能多的情况。
为了给您一个想法,这是文件名的示例:
samples = ['The Movie Title.avi',
'The Movie Title DVDRIP. Useless.info.avi',
'The Movie Title [2005].avi',
'The Movie Title (2005) [Useless.info].avi',
'The Movie Title 2005 H264 DVDRip Useless-Info.avi',
'The Movie Title 2005 XviD Useless info.avi',
'The Movie Title {2005} DVDRIP. UselessInfo.avi',
'The.Movie.Title.2005.Useless.info.avi',
'[Useless.info]_The.Movie.Title.2005.Useless.avi']
Run Code Online (Sandbox Code Playgroud)
任何地方都有UselessInfo它是因为写的东西可能有任何东西并且不能用于获取信息(从文件到文件的更改)。另请注意,这'The Movie Title'可能是带有数字或非字母字符的内容,例如:The Movie Title 2 - The Return'例如。
预期的输出应该是一个字典,如:
metadata = {'title': 'The Movie Title', 'year': '2005'}
Run Code Online (Sandbox Code Playgroud)
现在我正在使用一串 regexp,但我不知道有更好的方法来做到这一点。
很久以前了 !但是如果有人需要它,我发现这个名为 PTN 的Python 库非常有用!非常感谢编码它的人!
安装它: pip install parse-torrent-name
import PTN
torrentName = "[Torrent9.info ] Silicon.Valley.S04E04.VOSTFR.WEB-DL.XviD-T9.avi"
info = PTN.parse(torrentName)
print(info)
Run Code Online (Sandbox Code Playgroud)
输出 : {'episode': 4, 'codec': 'XviD', 'title': 'Silicon.Valley.', 'group': 'T9', 'website': 'Torrent9.info', 'excess': 'VOSTFR', 'season': 4, 'quality': 'WEB-DL'}
所以它似乎正是你所需要的!
正如您在评论之一中提到的,将“文件名处理”转换为“标准化移动标题形式”的目的是比较两个列表。
使用当前的方法,您可能会错过很多极端情况。
首先,您需要仔细考虑您接受什么样的变化。您提到了“movie”“the”的不同位置 - 拼写错误和区分大小写怎么样?词序呢?
我建议您寻找一种通用的解决方案,而不是让您的代码变得越来越长。
我想到了一些想法——拿你喜欢的东西,随意混合,稍微加热一下,它就会煮得很好——我们开始吧:
A ^ B或A - B,再次 - 您需要什么(查看Python手册:Sets .