--- Title: pythonでfoobarのalternativeを作る 11 190518 Author: yamasyuh68 Web: https://mimemo.io/m/MpVzxoDKW3GvZLb --- ## DB作成 - ビューアがまあまあ出来てきたので本体に戻る。 mutagenで取得してDBに書き込むデータの種類を簡単に変えれるようにしたい、タグの種類を一度だけリスト化して後は自動でいくようにした ``` import glob ,re , os ,mutagen import sqlite3 import time # mutagen.File 利用 tags リスト化 項目可変 fo=r'i:\Music\New\**' count={'all':0 , 'mfile':0 , 'nonemusic':0 , 'file':0} tags=['artist','albumartist','date','album','tracknumber', 'title'] # tags=['artist','album','tracknumber', 'title'] conn = sqlite3.connect() c = conn.cursor() com1='create table IF NOT EXISTS musics(fullpath ' com2='INSERT INTO musics (fullpath' com3='values(?' for s in tags: com1 += ','+s com2 += ','+s com3 += ',?' com1 += ')' com2 += ') ' + com3 + ')' c.execute(com1) # create table start = time.time() for p in glob.iglob(fo , recursive=True): count['all']+=1 if os.path.isfile(p): count['file']+=1 if re.search('\.(mp3|ape|ogg|flac|aac|mp4|m4a)$', p): count['mfile']+=1 m = mutagen.File(p, easy=True) # m は辞書で要素はリスト、取り出し方が難しい tup=(p,) # initial tupple for tag in tags: try : tup += m[tag][0], # add tag-value to tupple except: tup += None, c.execute(com2,tup) else: count['nonemusic']+=1 continue 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(count) conn.commit() conn.close() ``` 辞書にしてたタグの種類をリストに変えた 辞書って便利なのかもしれないけど書きづらいし見づらいよなあ SQL文をfor文使って作ることにした 今後はすごく楽になったが可読性ひくい!!┐('д')┌ 何やってんだかわかんないな インサートのときにプレースホルダに渡すタプルをfor文で作る こういうのはプログラムらしくていいよな タグについて、取得するデータを増やしたら時間がガクッと遅くなったわ┐('д')┌ まあそういうもんか・・ - 第一段階といつ合体させよう? 関数化しておいた方が良いのかな