1
0

Pythonノート: Pythonのモジュールやスクリプトについて

Last updated at Posted at 2023-08-06

概要

Pythonでモジュールやスクリプトを書く場合のTips

moduleについて

module

再利用性の高いPythonスクリプトファイルを外部モジュールとして扱うことで、別のスクリプトから使うことができる。

module定義例

ex_mod.py
def ex_hello():
    print("hello")

使用するモジュールはimport文でインポートする

import ex_mod

ex_mod.

__name__ による動作の区別

if __name__ == "__main__":

のような記述は何を意味しているか?
pythonプログラムから外部モジュールとして呼ばれたか、記述されたファイル自身が実行スクリプトとして呼ばれたかの違いを区別している。

実行スクリプトとして呼ばれた場合は自動変数__name____main__が、モジュールとして呼ばれた場合はモジュール名が設定される。

記述例

pythonモジュールの例

# module.py
def mod():
    print(f"name = {__name__}")

if __name__ == "__main__":
    mod()

単独のスクリプトとして実行すると

実行
$ ./module.py
出力
name = __main__

以下のような外部のmain()からモジュールとして呼び出す場合

# main.py
import module

def main():
    module.mod()

if __name__ == "__main__":
    main()

main.pyを実行

実行
$ ./main.py
出力
name = module

importで参照するpath

importで参照する際のpathはsysモジュールのsys.pathに格納されている

import sys
import pprint as pp

pp.pprint(sys.path)

プリント結果

['/home/(current_path)',
 '/usr/lib/python38.zip',
 '/usr/lib/python3.8',
 '/usr/lib/python3.8/lib-dynload',
 '/home/g4p/work/pyt/venv/lib/python3.8/site-packages']

コマンドライン引数

argparseモジュールを使用して処理するのが便利。

まずはargparseをimportする

# test_script.py
#!/bin/env python
import argparse

ArgumentParser()メソッドでparserインスタンスを作る。

parser = argparse.ArgumentParser(
    prog="test script",
    usage="./test_script.py [param] (options)",
    description="Description",
    add_help=True,
)

引数を追加する

  • add_arguments()メソッドで引数を追加する。

オプション引数: optional arguments

  • オプション引数は'-n', '--name'のように'-'接頭辞付きで指定する
    parser.add_argument("-o", "--output", help="output file name")
  • 値を受け取らないで単に動作のフラグとして使用したい場合、action指定する。
    parser.add_argument("-v", "--verbose", help="verbose", action="store_true")

位置引数: positional arguments

  • 必ず値を取る必須な引数。'-'接頭辞なしで指定すると位置引数になる。
  • 位置引数は指定が必須となる。
    parser.add_argument("number")

値を参照する

parse_args()メソッドで値を参照することができる。

args = parser.parse_args()
print(f"args = {args}")
print(f"number = {args.number}")
print(f"verbose = {args.verbose}")
実行
$ ./test_script.py -v 2 -o out.txt
出力
args = Namespace(number='2', output='out.txt', verbose=True)
number = 2
output = out.txt
verbose = True

default値の指定

  • default値の指定はadd_argument()default='xxx'と記載する。
    parser.add_argument("-t", "--type", help="foramt type of output", default='txt')
    ・・・
    print(f"type = {args.type}")
実行
$ ./test_script.py -v 2 -o out.txt
出力
args = Namespace(number='2', output='out.txt', type='txt', verbose=True)
number = 2
output = out.txt
verbose = True
type = txt

標準ライブラリのモジュール

pprint による出力の整形

リストなど見やすく出力できる

import sys
print(sys.path)

通常のprint()での出力結果

['', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/g4p/work/pyt/venv/lib/python3.8/site-packages']

pprintモジュールのpprint()を使う

import sys
import pprint

pprint.pprint(sys.path)

pprint.pprint()での出力結果は適宜整形をしてくれる

['',
 '/usr/lib/python38.zip',
 '/usr/lib/python3.8',
 '/usr/lib/python3.8/lib-dynload',
 '/home/g4p/work/pyt/venv/lib/python3.8/site-packages']

プリント出力でなく文字列として取得したい場合

pprint.pformat()を使う

str = pprint.pformat(sys.path)
print(str)
['',
 '/usr/lib/python310.zip',
 '/usr/lib/python3.10',
 '/usr/lib/python3.10/lib-dynload',
 '/usr/local/lib/python3.10/dist-packages',
 '/usr/lib/python3/dist-packages']

参考

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