0 pythonでfoobarのalternativeを作る 2

2019/5/9

早速昨日やってみた

ファイル列挙はすんなりいった

  • しかしタグ取得がうまくいかない
    mp3だとイケルんだけど、fflacは取得できない
    m4aはどうなんだろう?
    このままじゃ使い物にならない┐('д')┌
  • 気づいたんだが、foobarはcueも読み込んでライブラリに追加してくれてた これはどうしよう? pythonに
    タグなんてヘッダの構造さえわかれば簡単だろうから自作した方が速いかな??調べてみるか・・・
  • SQLの書き込みは結構戸惑った
    簡単と言えば簡単なんだが。手間取るのは最初だけかな。コマンドを文字列で与えて設定値は変数にする辺りが。pythonで書くが故の面倒さなのかもしれない

SQLのこと

  • 最初の書き方、if not exist は重要だよな
    一度しか使わないデータベースなんてあり得ないから、解説サイトは全てこれで統一して欲しいものだ
  • 値の設定についても、変数で与える場合をデフォルトで解説してほしい 解説的には 'tarou' みたいのが簡単だとは思うけど、実際にこんな書き方をすることはまず無いだろう
    プログラムの中で何らかのデータを取得してそれをinsertなりupdateなりする場合しか考えられないから、変数で与えることにしかならない
    conn.execute('insert to hogetta values(?,?)' , (p,q))
    が基本形ですよね
  • しかし、作成されたデータファイルを見るとtxtはそのまんまテキスト。これなら自分で書けそうな?
    SQLの仕組みを使わなくてもって意味です
    SQLをpythonにバインディングするだけである程度ロスというか、遅くなるよね
    データ件数が増えたときに真価を発揮するんだろうか?

mutagen

  • 出来たみたい(・∀・)ノ
    本家
    https://mutagen.readthedocs.io/en/latest/
    PythonでFLACファイルのタグを扱う方法
    http://tranphonic.hatenablog.com/entry/2014/11/09/225201
    使い方知らないだけだった
    もともとifで分岐させてるからflacだけ抜いてelifするしかないな
    m4aとかは大丈夫なんかな?
    データベース件数は1069だった このなかでtitleが空白のデータを抜き出すにはどうしたら良いんだろう?
    こういうときこそSQLの出番だよなあ
    .
    .
    <家に帰ってからのコード>
import glob ,re , os
from mutagen.easyid3 import EasyID3
from mutagen.flac import FLAC
from mutagen.mp4 import MP4
from mutagen.aac import AAC
import sqlite3
import time

conn = sqlite3.connect(r'<fullpath>\database.db')
c = conn.cursor()
c.execute('create table IF NOT EXISTS musics(fullpath text, title text)')
q=''

fo=r'i:\Music\Jazz\**'
count=0
count1=0

def perror(p):
    global count
    count+=1
    print('error-->'+p)

start = time.time()

for p in glob.iglob(fo , recursive=True):
    count1 += 1
    if os.path.isfile(p):
        if re.search('\.(mp3|ape|ogg)$', p):
            try :
                tags = EasyID3(p)
                q=tags['title'][0]
            except:
                perror(p)
                q=''
        elif re.search('\.flac$', p):
            try :
                tags = FLAC(p)
                q=tags['title'][0]
            except:
                perror(p)
                q=''
        elif re.search('\.(mp4|m4a)$', p):
            try :
                tags = MP4(p)
                q=tags['\xa9nam'][0]  
            except:
                perror(p)
                q=''
        elif re.search('\.aac$', p):
            try :
                tags = AAC(p)
                q=tags['title'][0]
            except:
                perror(p)
                q=''
        else:
            continue
        c.execute( "INSERT INTO musics (fullpath, title) VALUES (?,?)" , ( p , q ))
        

elapsed_time = time.time() - start
print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")

c.execute('select count (*) from musics')
print('data--{0}'.format(c.fetchall()))
print('files--{0}'.format(count1))
print('error--{0}'.format(count))

conn.commit()
conn.close()
0

メモを他の人に見せる

このメモを見せたい人に、このURL(今開いているページのURLです)を教えてあげてください

コメント(0)

  • someone

  • someone