概要
- ファイルの名前を取得し、ファイルをディレクトリ毎に仕分けする
ゲーム、楽しんでますか?
どうも、JoyconでSplatoon2を1000時間やったのを知り合いに頭おかしいよ…と蔑まれるSotonoです。
最近はスプラしてないんですが、他のゲームプレイしてるとスクショとか動画とか溜まってSDがパンパンになったりしてる日々です。新しいSD買えや
それではいけないな、でも消すの嫌だな…というわけでSDカードをPCにうつしてスクショを管理してるのですが、日付別でしか分類されていないのでちょっとこれが気に食わない…
というわけでファイルの名前をよく見るとゲーム毎で違うIDが振り分けられているので、これを使ってゲーム別にフォルダ分けしたほうが個人的に管理が楽チンだな!
では早速やっていきましょう。
画像の名前の分析
Switchのアルバム内に記録されているファイル名は、だいたい次の形式になっています。
[日時]-[ゲームID].[拡張子]
- 日時
- 見たまんま、桁数が多すぎるのでコンマ秒まで記録してると思う(適当)
- ゲームID
- 今回のメインディッシュ、ゲーム毎に違うIDが振り分けられている。
- 体験版と製品版で違うIDが振られているのでそこは注意。
- 別筐体で違う可能性がないとは否めないのでちゃんと確認しよう。
- 拡張子
- 画像は
jpg
、動画はmp4
で保存されている。
- 画像は
余談
- Swtich内で設定されている日時を参照しているので、時間捜査とかしてるとその分だけズレるので、時間旅行勢は気をつけよう。
Extra
という謎のフォルダの中はスマブラで作った動画が保存されている、これだけ保存場所変えてあるので注意。
さて、分析をしたところでゲーム毎に違うIDが振り分けられていることがわかったので、これを利用して早速仕分けをしていく。
仕分けをPythonで記述する
だって俺がPythonしか使えないし…
ゲームIDとゲームタイトルを紐づけする
CSVでもなんでもいいので、ゲームID
とゲームの名前
を紐づけする。
これをしないとランダムでつけられたIDで管理する羽目になるのでそんなの分かりづらい…
というわけで、アホでズボラな僕は辞書で管理しようと思った。CSV回り使うのめんどくさくて…
dict = {
'hogehoge': 'Splatoon2',
'fugafuga': '大乱闘スマッシュブラザーズSP',
}
仕分け本番
適当に以下のようなフォルダ階層を組み立てます
.
└── (任意のフォルダ名A)
└── sw_hogehoge(ゲームタイトル)
├── img
└── ~.jpg
└── movie
└── ~.mp4
これで※1
に、Switch内のAlbum
フォルダの中身をそのまま入れれば、後は仕分けてくれるという算段で組み立てていきます。
だいたいのフローはこんな感じ。
- Album内にある画像、動画ファイルのみを、すべてAfterフォルダに移動する
- Afterフォルダの画像を取得し、対応するフォルダに仕分けていく
- フォルダがなかったら新たに作成する
import glob
import re
import os
import shutil
PYDIR = os.path.dirname(os.path.abspath(__file__))
INBOX = os.path.dirname(PYDIR)
INBOX_AFTER = f'{INBOX}/After'
ARCHIVE = os.path.dirname(INBOX)
MOV = '/movie'
IMG = '/img'
def main():
# ----- AlbumからAfterへ移動
before = f'{INBOX}/Album/????/??/??/*'
for i in glob.glob(before):
shutil.move(i, INBOX_AFTER)
# ----- Afterの中を走査してゲームフォルダへ
dir_game = ARCHIVE + '/sw_'
dir_inbox_glob = f'{INBOX_AFTER}/*'
for file in glob.glob(dir_inbox_glob):
for id in fold_id.dict:
if id in file:
to = dir_game + fold_id.dict[id]
# ゲームフォルダがない場合作成
if os.path.exists(to) is False:
FOLD_NAMES = ('', MOV, IMG)
[os.mkdir(to + fold_name) for fold_name in FOLD_NAMES]
to += MOV if '.mp4' in file else IMG
shutil.move(file, to)
if __name__ == '__main__':
main()
実行すると以下のような構成で任意A
にフォルダが作成されます。
.
└── sw_hogehoge(ゲームタイトル)
├── img
└── ~.jpg
└── movie
└── ~.mp4
フォルダ階層については各々で好きにカスタマイズしてください。
キミだけの最強のスクリーンショット管理システムを作り出せ!!
というわけでSwitchでPythonのファイル管理の基礎的なところをやってみました。
この人本当にPython仕事で2年間いじってたんですか?
終わりです、無人島戻ります…