LoginSignup
1
0

More than 3 years have passed since last update.

【Python】Switchのアルバムをゲーム別にフォルダ分けする

Last updated at Posted at 2020-04-13

概要

  • ファイルの名前を取得し、ファイルをディレクトリ毎に仕分けする

ゲーム、楽しんでますか?

どうも、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年間いじってたんですか?

終わりです、無人島戻ります…

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0