--- Title: pythonでfoobarのalternativeを作る 3 Author: yamasyuh68 Web: https://mimemo.io/m/XpEgPoANQMlmkjW --- 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)