【小ネタ】スクリーンショットをカレントへ移動する処理をちょっと深掘り

【小ネタ】スクリーンショットをカレントへ移動する処理をちょっと深掘り

ブログを書いているとスクリーンショットを取ることが多いのですが、毎回作業フォルダへ移動するのが面倒です。そのスクリーンショットをカレントディレクトリへコピーするスクリプトを作り、わからない処理を少し深掘りしてみました。
Clock Icon2020.03.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちはCX事業本部のさかじです。
ブログを書いているとスクリーンショットを取ることが多いのですが、毎回作業フォルダへ移動するのが面倒です。そのスクリーンショットをカレントディレクトリへコピーするスクリプトを作り、わからない処理を少し深掘りしてみました。

Pythonは今までたまにしか書いていなかったため、Pythonと仲良くできていなかったので個人企画として簡単なスクリプトを作ってみる、「はて?」と思ったことをちょっとだけ深掘りしてみたいと思います。

環境

  • MacBook Pro(macOS Mojave 10.14.6)

前提条件

  • スクリーンショットが保存されるフォルダは~/Picturesに変更
  • 本スクリプトがあるフォルダにパスは通してある

ソース

色々サイトを巡って作成したスクリプトです。

#!/usr/local/bin/python3
# -*- coding: utf-8 -*-
import os
import glob
import shutil
def main():
SCREEN_SHOT_DIR = os.environ['HOME'] + '/Pictures/'
CURRENT_DIR = os.getcwd()
file_list = glob.glob(SCREEN_SHOT_DIR + '*.png')
try:
src_file = max(file_list, key = os.path.getctime)
print('Move src:{0} dest:{1}'.format(src_file, CURRENT_DIR))
shutil.move(src_file, CURRENT_DIR)
except ValueError:
print('No file.')
if __name__ == '__main__':
main()
view raw mvsshot.py hosted with ❤ by GitHub

ちょっと深掘り

__name__って何?

printしてみると

$ python3
Python 3.7.6 (default, Dec 30 2019, 19:38:28) 
[Clang 11.0.0 (clang-1100.0.33.16)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print(__name__)
__main__
>>> 

__main__と表示されます。

Pythonのドキュメントを確認したところ

definition.__name__ クラス、関数、メソッド、デスクリプタ、ジェネレータインスタンスの名前です。

Python標準ライブラリname

ちょっと試してみましょう。

bar.py

def func1():
    print(__name__)

foo.py

import bar

def foo():
  print(__name__)

foo()

bar.func1()
  • 実行結果
$ python foo.py
__main__
bar

参考サイト

https://docs.python.org/ja/3/reference/datamodel.html

最後に

if __name__ == '__main__': は現在動作している関数などが__main__か?を判定しているのですね。classとして作成してもこの判定はあれば単体で動かしてテストコードを書いておくと簡易的に単体テストできそうですね。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.