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文で作る
こういうのはプログラムらしくていいよな
タグについて、取得するデータを増やしたら時間がガクッと遅くなったわ┐('д')┌
まあそういうもんか・・