我正在尝试从文件名中提取电影元数据(标题和年份)。
名称模式不是标准的,但它也不是随机的,所以我试图尽可能多地覆盖案例。
为了给你一个想法,这是文件名的例子:
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']
任何地方都有UselessInfo
,因为写入的内容可能是任何内容,不能用于获取信息(从文件到文件的更改)。另请注意,'The Movie Title'
可能是带数字或非字母字符的字符,例如:The Movie Title 2 - The Return'
。
预期输出应该是一个字典,如:
metadata = {'title': 'The Movie Title', 'year': '2005'}
现在我正在使用正则表达式链,但我不知道有更好的方法可以做到这一点。
答案 0 :(得分:2)
为什么不下载一个包含电影名称和日期列表的数据库(可能在维基百科上),然后将文件名与此列表进行比较?有太多边缘情况可能更有效。
答案 1 :(得分:2)
很久以前!但如果有人需要它,我发现这个名为PTN的python library非常有用!非常感谢那个编码它的人!
安装它: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)
输出:{'episode': 4, 'codec': 'XviD', 'title': 'Silicon.Valley.', 'group': 'T9', 'website': 'Torrent9.info', 'excess': 'VOSTFR', 'season': 4, 'quality': 'WEB-DL'}
所以它似乎正是你所需要的!
答案 2 :(得分:1)
正如你在其中一篇评论中提到的,这个“文件名处理”到“标准化移动标题表”的目的是比较两个列表。
使用您当前的方法,您可能会错过许多极端情况。
首先,您需要仔细考虑接受哪种变体。你已经提到了“电影”“the”的不同地方 - 那么拼写错误和区分大小写? 单词顺序怎么样?
我建议您寻找一种通用的解决方案,而不是让您的代码越来越长。
我想到了一些想法 - 拿你喜欢的东西,随意混合,加热一点,它就会煮得很好 - 我们走了:
A ^ B
或A - B
- 您需要的内容(结帐Python Manual: Sets。