用PYTHON脚本拆分M3U文件
M3U文件是播放列表文件,里面记录的是一条一条的音频或视频资源地址。
最近从网上收集了一些在线电视的资源列表,这M3U文件的形式,但这个列表长度达到1000多项内容。
而且这里面包含了太多已经失效的资源地址,手机上的APP又没有单独删除某一条地址的功能,
于是只能把它拆分为一个M3U文件一个资源,方便在手机上管理和删除。
先看看这个M3U文件长什么样:
#EXTM3U
#EXTINF:-1 ,CCTV-1蓝光
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226226/1.m3u8
#EXTINF:-1 ,CCTV-1蓝光
http://112.50.243.8/PLTV/88888888/224/3221225922/1.m3u8
#EXTINF:-1 ,CCTV-2蓝光
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226230/1.m3u8
#EXTINF:-1 ,CCTV-2蓝光
http://112.50.243.8/PLTV/88888888/224/3221225923/1.m3u8
#EXTINF:-1 ,CCTV-3蓝光
http://117.169.124.36:6610/ysten-businessmobile/live/cctv-3/1.m3u8
#EXTINF:-1 ,CCTV-3蓝光
http://223.110.241.130:6610/gitv/live1/G_CCTV-3-HQ/.m3u8
#EXTINF:-1 ,CCTV-4蓝光
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226314/1.m3u8
#EXTINF:-1 ,CCTV-4蓝光
http://112.50.243.8/PLTV/88888888/224/3221225802/1.m3u8
#EXTINF:-1 ,CCTV-5蓝光
http://223.110.241.130:6610/gitv/live1/G_CCTV-5-HQ/G_CCTV-5-HQ/
#EXTINF:-1 ,CCTV-5蓝光
http://112.17.40.145/PLTV/88888888/224/3221226687/index.m3u8
第一行是#EXTM3U表明文件类型。
第二行#EXTINF后面跟的是视频长度和视频名称。
第三行http开头的是视频在线播放的地址。
可以看出来这是个比较简单的文本格式,可以写个简单的PYTHON脚本把它进行拆分。
下面是我写好的脚本:
#从A.M3U读取文本,导出A1,A2...An.M3U.
import io
import os
#生成文件
def make_m3u_file(name, link):
obj = open(name, mode="w+", encoding="utf8")
obj.write("#EXTM3U\n#EXTINF:-1,")
obj.write(name+"\n")
obj.write(link)
obj.close
#获取文件名,并去除非法字符
def get_item_name(extinf):
name = extinf.split(",", 1)[1]
name = name.replace(" ", "")
name = name.replace(":", ".")
name = name.replace("/", ".")
name = name.replace("\\", ".")
name = name.replace("|", ".")
name = name.replace("?", ".")
name = name.replace("*", ".")
name = name.replace("<", ".")
name = name.replace(">", ".")
return name+".m3u"
#处理输入的文本文件
def m3u_dump(m3u_file):
item_name = ""
item_link = ""
lines = m3u_file.readlines()
for line in lines:
line = line.rstrip("\r\n")
if line.startswith("#EXTINF"):
item_name = get_item_name(line)
if line.startswith("http"):
item_link = line
print(item_name, item_link);
make_m3u_file(item_name, item_link)
###################################################
#程序入口
m3u_file_name = input("输入文件名:")
m3u_file_obj = open(m3u_file_name, "r", encoding="utf8")
m3u_dump(m3u_file_obj)
m3u_file_obj.close()
print("处理完成!")
启动这个脚本后,输入M3U文件的路径,会在当前工作目录,生成一大堆单个的M3U文件。