python-3.x - 用 Python 从电视节目中提取星期几
问题描述
我有以下电视节目的列表
(ABC)-(O)-(Mon-Fri)-(20:30-21:00)
(DEF)-(O)-(Mon-Sat)-(19:00-20:00)
(GHI)-(R)-(Mon-Tue,Thu-Fri,Sun)-(09:00-12:00)
(JKL)-(R)-(Mon,Wed,Fri-Sun)-(14:30-15:30)
(MNO)-(R)-(Fri)-(16:30-17:00)
格式是 - ABC、DEF,等等是节目名称,O 或 R 是节目的剧集是全新的还是重复播出的,Mon-Fri 等等是节目的星期几播出之后是播出时间。
我有兴趣在 Python 3 中使用 Regex 来提取每个节目播出的星期几。考虑一下节目 GHI:它在周一、周二而不是周三播出,在周四和周五播出,而不是在周六播出,然后在周日再次播出。节目 ABC 在包括周一和周五在内的所有日子播出。
谢谢你。
对于 GHI,它在一周中的哪几天播出应该是
TVShow["GHI"]["DaysofWeek"] = ["Monday", "Tuesday", "Thursday", "Friday", "Sunday"]
解决方案
思考过程:
- 首先获取频道名称和日期
- 将频道名称设置为字典中的键
- 用连字符分割天数并记录范围
- 当有日期范围时,将这些日期转换为整数值以进行迭代并创建范围列表
- 将范围列表合并为一个简单列表
- 将日期值与全天列表匹配
- 将其分配给节目的 DaysofWeek 键
import re
def main ():
shows = {}
tvshows = '''(ABC)-(O)-(Mon-Fri)-(20:30-21:00)
(DEF)-(O)-(Mon-Sat)-(19:00-20:00)
(GHI)-(R)-(Mon-Tue,Thu-Fri,Sun)-(09:00-12:00)
(JKL)-(R)-(Mon,Wed,Fri-Sun)-(14:30-15:30)
(MNO)-(R)-(Fri)-(16:30-17:00)'''
tvshows = tvshows.split ('\n') # Break up new lines into a separate list
for tvshow in tvshows:
channel = re.findall (r'\((.*?)\)', tvshow) # Regex return ['ABC', 'O', 'Mon-Fri', '20:30-21:00']
shows.setdefault (channel [0], {}) # Set key to channel/tv show name
shows [channel [0]].setdefault ('DaysofWeek', get_day (channel [2])) # Assign 'DaysofWeek' as key and the show days as value
print (shows)
print (shows ['GHI']['DaysofWeek'])
def get_day (show_days):
day_ranges = []
rangelist = []
abbr_day = {'Mon': 0, 'Tue': 1, 'Wed': 2, 'Thu': 3, 'Fri': 4, 'Sat': 5, 'Sun': 6}
full_day = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
show_days = show_days.split (',') # Split by comma within show day
show_days = [day.split ('-') for day in show_days] # Split by hyphen. Results: [['Mon', 'Tue'],
# ['Thu', 'Fri'], ['Sun']]
# Converting abbreviated days to integers
for days in show_days:
temp = [abbr_day [day] for day in days if day in abbr_day] # Check show day matching abbreviated days, if
# matches, get its corresponding integer value
rangelist.append (range (temp [0], temp [-1] + 1)) # Combined everything into a list of range.
# Example: [range(0, 2), range(3, 6), range(6, 7)]
# Loop through the list of ranges and combine into one single list. Example: [0, 1, 3, 4, 5, 6]
day_ranges = [j for i in rangelist for j in i if j not in rangelist]
# Convert the integers value back to full day and put it in a list
tv_days = [full_day [day] for day in day_ranges]
return tv_days
if __name__ == '__main__':
main ()
输出:
print ('shows [\'GHI\'][\'DaysofWeek\'] = ', shows ['GHI']['DaysofWeek'])
shows ['GHI']['DaysofWeek'] = ['Monday', 'Tuesday', 'Thursday', 'Friday', 'Sunday']
推荐阅读
- openlayers - 如何检测何时添加顶点
- python - 使用索引填充熊猫数据框中的平均值
- swift - Firebase 拒绝 Instagram API 令牌
- c++ - 无法使方法存在检测机制起作用
- dart - 如何更改 TextFiled 中 Focused prefixIcon 图标颜色的颜色?
- cassandra - 修改 cqlsh 提示符以获取唯一标识符
- java - 如何从其他类制作的按钮对象中获取来源'
- html - 如何制作一个可根据设备屏幕调整大小的侧导航栏(并在其旁边制作一个顶部导航栏)?
- javascript - 弹出窗口没有显示我想要的照片
- haskell - 尝试编写 Haskell 函数以获取字符串参数并附加到文件