Python tips
提供: Eospedia
目次
argparse
https://docs.python.org/release/3.8.2/library/argparse.html
インスタンス化
モジュールdocstring書いといてそれをdescriptionにすると良さげ
parser = argparse.ArgumentParser(description=__doc__)
オプション名の書き方と格納先変数名
https://docs.python.org/release/3.8.2/library/argparse.html#dest
引数個数の指定
https://docs.python.org/release/3.8.2/library/argparse.html#nargs
ヘルプメッセージにデフォルト値を表示する
https://docs.python.org/release/3.8.2/library/argparse.html#argparse.ArgumentDefaultsHelpFormatter
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
具体例1
def parse_args(): parser = argparse.ArgumentParser( formatter_class=argparse.ArgumentDefaultsHelpFormatter, description=__doc__ ) parser.add_argument('--Z_file', type=str, required=True, help='Pickled file of latent variables.') parser.add_argument('--k_init', type=int, default=2, help='Initial number of clusters in X-Means') parser.add_argument('--k_max', type=int, default=20, help='Max number of clusters in X-Means') parser.add_argument('--criterion', type=str, default='bic', choices=['bic', 'mndl'], help='Splitting criterion. bic: bayesian information criterion, mndl: minimum noiseless description length.') parser.add_argument('--random_state', type=int, default=None, help='Random seed for X-Means initialization (K-Means++)') parser.add_argument('--no_ccore', action='store_true', help='Use python implementation of PyClustering library, instead of C++.') parser.add_argument('--outdir', required=True, help='Output directory.') parser.add_argument('--input_star', type=str, required=True, help='Input star file.') parser.add_argument('--output_star_rootname', type=str, default='cluster', help='Output file rootname for each cluster\'s star file.') parser.add_argument('--output_model', type=str, default='xmeans_model.pkl', help='Output X-Means model file name (pickled).') args = parser.parse_args() logger.info('##### Command #####\n\t' + ' '.join(sys.argv)) args_print_str = '##### Input parameters #####\n' for opt, val in vars(args).items(): args_print_str += '\t{} : {}\n'.format(opt, val) return args
logging
https://docs.python.org/release/3.8.2/library/logging.html
ロガー生成スニペット
logging_fmt = logging.Formatter( '\n[%(asctime)s - %(name)s - %(levelname)s] %(message)s') logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) stream_handler = logging.StreamHandler() stream_handler.setFormatter(logging_fmt) logger.addHandler(stream_handler) def set_logger(log_file, is_debug): if log_file is not None: log_file_dir = os.path.dirname(log_file) if log_file_dir: if not os.path.exists(log_file_dir): logger.debug('Creating log file directory...') os.makedirs(log_file_dir) elif not os.path.isdir(log_file_dir): logger.error('{} is not a directory.'.format(log_file_dir)) sys.exit(1) file_handler = logging.FileHandler(log_file, mode='w') file_handler.setFormatter(logging_fmt) logger.addHandler(file_handler) if not is_debug: logger.setLevel(logging.INFO)
serialize
pickle
保存
pickle.dump(\ object_to_be_serialized, open(outfile, 'wb'), protocol=4)