Steam
评价数不足
_vr.jpg を削除する
由 bravehearts623 制作
面倒くさいことは Python にやらせるシリーズ。今回は _vr.jpg を削除するスクリプトです
   
奖励
收藏
已收藏
取消收藏
このスクリプトについて
コードは Gist[gist.github.com] で管理しています。

Steam の機能で保存したもの以外のスクリーンショットは、ファイルチェック時に VR 用のパスが誤って登録されます。
このスクリプトは Screenshots.vdf をチェックして、そのパスを削除するものです。

パスをチェックしたときに実際にファイルがあれば場合は、そのファイルも削除します。(ダミーファイル作ってる人用)
ライブラリに VR ゲームがある方は除外リストに ID を加えておかないと、そのゲームのスクショのパスも削除されてしまうので気をつけてください。

VDF ライブラリ(github[github.com])を使うので pip install vdf しておいて下さい。

あと、まだ本番環境でチェックしてません。
コード
#! python3 # screenshotVdfCorrect # encoding: UTF-8 import vdf, pathlib, logging ### # Main # def main(): logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s -> %(message)s') # logging.disable(logging.CRITICAL) # Screenshots.vdf の場所を指定します。 vdf_input = 'H:/test_screenshots.vdf' # D:\Picture\SteamScreenshots\760\screenshots.vdf vdf_output = vdf_input #vdf_output = 'H:/test_screen_o.vdf' #if not vdf_output in locals(): # vdf_output = vdf_input # TODO args 対応したい方がいい気がする. output はデバッグのため # スキップしたい appid がある場合、つまり VR 対応ゲームがある場合したの括弧内に追加します。 # 例 skip_id = ('shortcutnames', 620980', 631900') skip_id = ('shortcutnames') with open(vdf_input, 'r', encoding='utf-8') as fi: try: d = vdf.parse(fi) except SyntaxError as e: # 自分で編集していて、おかしなところに括弧が残っていたりすると読み込めないことがある print(' e: [{0}] msg: [{1}] VDF の記述が正規のものではありません。' .format(e.errno, e.strerror), file=sys.stdout) # ここから vrfilename のチェックとファイル削除 root = 'Screenshots' try: for L1 in d[root]: # L1 は appid を指す。指定したスキップ対象ならば飛ばす if not L1 in skip_id: # L2 は スクショ番号を指す。0 から始まる。起動のたびに振り直され 0 が最新 for L2 in d[root][L1]: vrfile = d[root][L1][L2]['vrfilename'] logging.debug('{} {} {}'.format(L1, L2, vrfile)) if vrfile != '': vr_path = pathlib.PurePath(vdf_input).parent / 'remote' / vrfile d[root][L1][L2]['vrfilename'] = '' logging.debug('{}'.format(vr_path)) # ダミーがある場合は削除 path = pathlib.Path(vr_path) if path.exists(): path.unlink() logging.debug('削除しました。') except KeyError as e: print(' e: [{0}] msg: [{1}] VDF の構成が変わっています。このバージョンのスクリプトでは読み込めません。' .format(e.errno, e.strerror), file=sys.stdout) raise except TypeError as e: print(' e: [{0}] msg: [{1}] VDF の構成が変わっています。このバージョンのスクリプトでは読み込めません。' .format(e.errno, e.strerror), file=sys.stdout) raise except: print('unexcepted error: {}'.format(sys.exc_info()[0])) raise # セーブ with open(vdf_output, 'w', encoding='utf-8') as fo: # pretty は カワイイ。じゃなくて整形 vdf.dump(d, fo, pretty=True) if __name__ == "__main__": main()
3 条留言
bravehearts623  [作者] 2018 年 9 月 28 日 上午 5:47 
コードの名前を修正しました。接続エラーが出て少々手間取りましたが、Gist の方も修正してあります。
bravehearts623  [作者] 2018 年 9 月 27 日 下午 8:49 
あああ、そうですね! テストで間違えやすいポイントそのままの間違いでした。ありがとうございます。
No Money No Honey 2018 年 9 月 27 日 上午 5:03 
あのあの、細かいことで恐縮なんですけど、「訂正」は collect じゃなくて correct です。