0 pythonでfoobarのalternativeを作る 3

190509
データを複数に分割調べる

職場で調べておいたことを昨日家に帰ってやってみた

  • ファイル列挙のフィルタがうまく動作してなかったことが判明
    re.search('\.(mp3|aac)$' , f)
    って感じが正解でした
    文字列中にapeなんて入る可能性あるんだなあ
    行末指定とか、ピリオドのエスケープをしておかないと正確に動きませんな
  • それよりも、mutagen は拡張子毎に関数を変えなければいけないみたい。少なくともflac,m4a,aacは別だった。ドキュメントを読むと拡張子毎に別モジュールになってるようなのでちょっと面倒だな。自動判定してくれないんだろうか?
  • それと、タグは全て一気に取得するようだ。欲しいタグは限られてるので無駄感が強い。自作した方が速そうだな
  • しかしm4aとか、appleの規格はタグ情報非公開らしく、さらに、例えばtitleタグも別の記号、/xa9ma みたいな名前になってる。mutagenのドキュメントに書いてあった。もともと音声ファイルのフォーマットは多彩で統一感がないけど、タグは統一されてるものと思っていた。違うんだな、面倒なんだなあ
  • こうしてみるとfoobarのライブラリはすごいっすね、これのalternativeはナカナカ難しいかもしれないなあ

SQL回りの話

  • データベース作成にかかるタイマーを設定してみた 私の環境だと2000ファイルで10秒ちょっとかかる globのファイル列挙、mutagenのタグ取得もあるから、SQLに要する時間はわからないんだが
  • 音楽ファイルの総数はわかんないけど、多分500Gくらいはあると思う。最近flacも増えてるから1ファイル10Mとすると、500,000ファイルか?
    そんなにはないよな。でも10万以上にはなりそうだな。そうなると500秒、8分以上かかるのか????foobarは全然速いよなあ・・・・
    まあ時間短縮、コードの最適化は先の話ですけどね
  • foobarのコンポーネントを見ていたら、ライブラリ回りでsqliteで操作するっぽいのを見つけた foobarのdbはSQLなんだろうか???
  • ずっと気になってるのがDBの更新、特にアプリ起動時のフォルダスキャンの仕組み。foobarは起動時明らかにHDをスキャンしてる、音がします。変更が無ければ何もしないんだと思うけど、そこのロジックがわからない
  • ファイルを列挙して更新日付を取得して自分のDBと比較して同じなら無視、違ってたらupdateって事で良いのだろうか?
  • そういう意味ではeverythingも同じだよなあ どういった仕組みなんじゃろ?
  • 何となくDBって需要もないし避けてきたけど、いじり出すと面白い。長男がDBやっておくと使えると言ってたけど、良い機会なので勉強しようと思います

①フルパスと更新日時でDB作成
②globで列挙
更新日時取得
dbから
select ファイル名 mtime where mtime=更新日時 て更新日時を比較
同じならぱす、違ってたら更新

•atime: 最終アクセス日時
•mtime: 最終内容更新日時
import os
print(os.stat('data/temp/test.txt'))

os.stat_result(st_mode=33188, st_ino=8728494137, st_dev=16777220, st_nlink=1, st_uid=501, st_gid=20, st_size=6, st_atime=1549094615, st_mtime=1549094615, st_ctime=1549094615)

os.path.getmtime(path)

0

メモを他の人に見せる

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

コメント(0)

  • someone

  • someone