Grooveミュージックのプレイリスト(zpl)をPlenue Dに適合するプレイリスト(m3u)に変換するPythonスクリプト
第一引数にzplのパスを入れます。ワイルドカード(アスタリスク)に対応しています。
m3uファイルはm3uフォルダに格納されます。
例)
python .\trans-zpl-to-m3u.py *.zpl
- extract_relpath関数のreplace箇所を各自の音楽フォルダのパスに合わせること
Grooveミュージックのプレイリスト(zpl)をPlenue Dに適合するプレイリスト(m3u)に変換するPythonスクリプト
第一引数にzplのパスを入れます。ワイルドカード(アスタリスク)に対応しています。
m3uファイルはm3uフォルダに格納されます。
例)
python .\trans-zpl-to-m3u.py *.zpl
| #!/usr/bin/python | |
| #encoding: utf8 | |
| import sys, os | |
| import xml.etree.ElementTree as ET | |
| import glob | |
| import codecs | |
| def usage(): | |
| print("usage: {} <zpl files>".format(sys.argv[0])) | |
| def extract_relpath(abspath, prefix=""): | |
| relpath = abspath[1:] # ommit drive letter | |
| relpath = relpath.replace(u':\\Component\\User_data\\ミュージック\\flac', '') | |
| relpath = relpath.replace(u':\\Component\\User_data\\ミュージック\\wma_foo', '') | |
| return prefix + relpath | |
| prefix = "\Music" | |
| output_dir = "./m3u/" | |
| if not os.path.exists(output_dir): | |
| os.mkdir(output_dir) | |
| for file_name in glob.glob(sys.argv[1]): | |
| base_name, _ = os.path.splitext(file_name) | |
| ### read zpl file | |
| with open(file_name, encoding="utf-8") as f: | |
| root = ET.fromstring(f.read()) | |
| ### transform from zpl to m3u | |
| seq = root[1][0] | |
| m3u = "#EXTM3U\r\n" | |
| for x in seq: | |
| m3u += "#EXTINF:\r\n" | |
| src = "{}".format(x.get('src')) | |
| m3u += extract_relpath(src, prefix) | |
| m3u += "\r\n" | |
| ### write m3u | |
| bom = codecs.BOM_UTF16_LE | |
| with open(output_dir + base_name + ".m3u", "wb") as f: | |
| f.write(bom) | |
| f.write(m3u.encode('utf-16le')) |