Help us understand the problem. What is going on with this article?

Python3でプレイリスト(m8u8ファイル)の読み込み

m8u8ファイルとは

音楽のプレイリストを保存するファイル形式。中身は以下の形式で保存されたテキストファイルです。
ミュージックプレイヤーでプレイリストをエクスポートすると出力される。
m8u8はutf-8、m8uはSJISの文字コードで保存されてることを表す拡張子。

#EXTM3U
#EXTINF:456,約束 【ORT】
F:\music\THE IDOLM@STER\765プロダクション\01_約束 【ORT】.flac
#EXTINF:240,Cherry Colored Love
F:\music\THE IDOLM@STER\ミリオンライブ!\01_Cherry Colored Love.wav

曲の長さや曲名 → 曲のフルパス → 次の曲 ...と改行して記載してある。
#EXTINF:456,約束 【ORT】
 → 456は曲の長さ[秒],曲名

データクラス

class M8U8Info : 
    lengthTime = 0
    name = b""
    filepath = b""
    ext=""

読み込みクラス

1行目は無視して、偶数行から曲名や長さを設定して、奇数行からフルパスを設定するだけ。
書いた後に思ったが、高階関数でもっとスマートな感じでできると思う。

class M8U8Reader :
    def __init__(self, filepath: str, encode='utf_8_sig') :
        p_new = pathlib.Path(filepath)
        with p_new.open(mode='r', encoding=encode) as f:
            self.readData = f.readlines()

    def read(self) :
        m8u8InfoList = []

        for i in range(len(self.readData)) :
            if i == 0 :
                continue
            if i % 2 == 1 :
                extinf = self.readData[i].split(',')
                m8u8 = M8U8Info()
                m8u8.lengthTime = int(extinf[0][8:])
                m8u8.name = extinf[1].strip()
                m8u8.filepath = os.path.abspath(self.readData[i + 1]).strip()
                m8u8.ext = os.path.splitext(m8u8.filepath)[1]
                m8u8InfoList.append(m8u8)

        return m8u8InfoList

メモ

・私が使ってる外部プレーヤーで出力した場合、BOM付きのUTF-8だったため、以下でエンコードした。
encode='utf_8_sig'

・Windowsのvscodeで日本語出力するメモ

sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした