Skip to content

Instantly share code, notes, and snippets.

@K-atc
Last active January 6, 2019 09:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save K-atc/c5e434d001154977d8868513a4bf2ce7 to your computer and use it in GitHub Desktop.
Save K-atc/c5e434d001154977d8868513a4bf2ce7 to your computer and use it in GitHub Desktop.
Grooveミュージックのプレイリスト(zpl)をPlenue Dに適合するプレイリスト(m3u)に変換するPythonスクリプト

Grooveミュージックのプレイリスト(zpl)をPlenue Dに適合するプレイリスト(m3u)に変換するPythonスクリプト

使い方

第一引数にzplのパスを入れます。ワイルドカード(アスタリスク)に対応しています。
m3uファイルはm3uフォルダに格納されます。

例)

python .\trans-zpl-to-m3u.py *.zpl

注意事項

  • extract_relpath関数のreplace箇所を各自の音楽フォルダのパスに合わせること

参考資料

#!/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'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment