电源信息提取--课后程序(Python程序开发案例教程-黑马程序员编著-第11章-课后作业)

实例2:电影信息提取

在“电影.txt”文件中,包含电影排名、电影名称、评分、类别、演员等信息。虽然该文件中数据杂乱,不能很清晰地了解全部数据信息,但是每种数据都有相对应的标签,例如title标签对应着电影名称、rating标签对应着电影评分、rank标签对应着电影排名。为了能够提取指定的数据信息,可以使用正则表达式。图1所示为“电影.txt”文件中数据。

 

  1.  电影.txt

本实例要求编写程序,实现提取排名前20的电影名称与评分信息的功能。

实例目标

  1. 掌握re模块中compile()函数的使用
  2. 掌握re模块中findall()方法的使用

实例分析

在使用正则表达式匹配之前,我们需要先读取“电影.txt”文件中的数据,将读取的数据作为正则表达式待匹配的目标文本对象。由于实例要求提取排名前20的电影名称及评分,所以需要编写符合要求的正则表达式,具体如下:

  1. 电影名称对应的正则表达式为title":"(.*?)。
  2. 电影评分对应的正则表达式为rating":\["(.*?)","\d+"\]。
  3. 电影排名对应的正则表达式为rank":(\d+)。

代码实现

import re

data = open("电影.txt", 'r', encoding='utf-8').read()

# 定义正则表达式分别匹配电影名称/评分/排名

title = r'"title":"(.*?)"'

rating = r'"rating":\["(.*?)","\d+"\]'

rank = r'"rank":(\d+)'

# 预编译正则表达式

pattern_title = re.compile(title)

pattern_rating = re.compile(rating)

pattern_rank = re.compile(rank)

# 查找全部匹配的数据(返回列表)

data_title = pattern_title.findall(data)

data_rating = pattern_rating.findall(data)

data_rank = pattern_rank.findall(data)

for i in range(20):

    print("排名:", data_rank[i] + "\t\t" + "电影名:" + data_title[i]

 + "\t\t" + "评分:" + data_rating[i])

以上代码首先导入了re模块,打开“电影.txt”文件并将读取的数据赋值给data,然后编写了分别匹配电影名称、电影评分、电影排名的正则表达式title、rating、rank,使用complie()函数预编译正则表达式,通过findall()方法查找匹配的内容,最后遍历输出前20条数据,即排名前20的电影信息。

代码测试

运行代码,控制台输出结果如下:

排名: 1     电影名:肖申克的救赎       评分:9.6

排名: 2     电影名:霸王别姬           评分:9.6

排名: 3     电影名:控方证人           评分:9.6

排名: 4     电影名:伊丽莎白           评分:9.6

排名: 5     电影名:美丽人生           评分:9.5

排名: 6     电影名:辛德勒的名单       评分:9.5

排名: 7     电影名:这个杀手不太冷     评分:9.4

排名: 8     电影名:阿甘正传           评分:9.4

排名: 9     电影名:十二怒汉           评分:9.4

排名: 10    电影名:泰坦尼克号 3D    评分:9.4

排名: 11    电影名:背靠背,脸对脸     评分:9.4

排名: 12    电影名:灿烂人生          评分:9.4

排名: 13    电影名:茶馆              评分:9.4

排名: 14    电影名:十二怒汉          评分:9.4

排名: 15    电影名:巴黎圣母院        评分:9.4

排名: 16    电影名:控方证人          评分:9.4

排名: 17    电影名:罗密欧与朱丽叶     评分:9.4

排名: 18    电影名:盗梦空间          评分:9.3

排名: 19    电影名:泰坦尼克号        评分:9.3

排名: 20    电影名:千与千寻          评分:9.3

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaozhima-dun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值