0 pythonでfoobarのalternativeを作る 11 190518

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(<pass>)
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文で作る
こういうのはプログラムらしくていいよな

タグについて、取得するデータを増やしたら時間がガクッと遅くなったわ┐('д')┌
まあそういうもんか・・

  • 第一段階といつ合体させよう?
    関数化しておいた方が良いのかな
0

メモを他の人に見せる

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

コメント(0)

  • someone

  • someone