pythonでfoobarのalternativeを作る 2 version 6
:追加された部分
:削除された部分
(差分が大きい場合、文字単位では表示しません)
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()
```
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()