Python数据分析【第4天】| 命令行传参(argparse模块)

系列文章目录

第1天:读入数据
第2天:read()、readline()与readlines()
第3天:进度条(tqdm模块)



前言

对于新手而言,还有什么比命令行传参更酷的呢?

一、今天所学的内容

我们常常需要用同一个python脚本去处理不同的数据,但这就难免需要反复打开脚本来修改其中的某些参数,最常见的例子就是当输入文件发生变化时,需要修改对应的路径参数。这时,我们就可以用argparse模块来实现通过命令行向python脚本传参,既专业又便捷,perfect!

二、python知识点详解

1.安装与导入

argparse是python自带的命令行参数解析包,因此并不需要专门安装,直接导入即可。

import argparse

2.基本用法

还是通过例子来讲解:

import json
import argparse
import pandas as pd
from time import localtime, strftime


def proc(input_file, info):
    with open(input_file, 'r', encoding='UTF-8') as f:
        contents = f.read()

    contents = eval(repr(contents).replace('}\\n{', '},\\n{'))
    new_contents = '[' + contents + ']'

    my_list = json.loads(new_contents)
    df = pd.DataFrame(my_list)

    df.to_csv(f'result_{info}.csv')


if __name__ == "__main__":
    time_stamp = strftime('%Y_%m_%d_%H_%M_%S', localtime())

    parser = argparse.ArgumentParser()
    parser.add_argument('--input_file', type=str, required=True, help='path to the input file.')
    parser.add_argument('--save_info', type=str, default=time_stamp, help='to name different output files.')  
    parser.add_argument('--say_hello', action='store_true')  
    opt = parser.parse_args()

    if opt.say_hello:
        print("Hello!看完教程可以顺便关注我一下吗?嘿嘿~")
    proc(opt.input_file, opt.save_info)

这是今天写的一个简单的数据处理脚本,我们现在只关注于main函数部分。

首先是实例化一个parser对象

parser = argparse.ArgumentParser(description="a simple example.")

这里的参数description是对于这个脚本的描述,根据自己的情况随便写即可,也可以不写,像下面这样

parser = argparse.ArgumentParser()

然后就是调用add_argument方法向这个对象中添加我们所要传的参数的相关信息

parser.add_argument('--input_file', type=str, required=True, help='path to the input file.')
parser.add_argument('--save_info', type=str, default=time_stamp, help='to name different output files.')

在说明add_argument()方法的各项参数之前,我们先来看一下如何在命令行中向这个脚本传参(这里假设我们这个脚本的名字是data_processing.py)

python3 data_processing.py --input_file ./data.json --save_info test --say_hello

这句命令的含义就是执行data_processing.py,并将"./data.json “传给”–input_file",把"test"传给"–save_info"。

这时我们再回过头来看之前的两行add_argument(),就不难理解了:

  • ‘–input_file’:指定参数名
  • type:指定所传参数的数据类型
  • required=True:意味着每次执行脚本是必须传入’–input_file’这个参数,否则无法执行,当然,如果不指定这个required的值、或赋值为False,那么’–input_file’这条参数就不是必须的。
  • help:对这个参数的说明
  • default:因为"–save_info"参数不是必须的,所以我们需要为它指定一个默认的值,当我们没有通过命令行向"–save_info"传参时,它就会被赋予这个默认值。

另外,当所传的参数是bool值时,就不能按照上述方法进行了,需要用到add_argument()方法中的’action’参数

parser.add_argument('--say_hello', action='store_true')  

这句的意思是,脚本中 “say_hello” 的默认值是False,而当我们在命令行中加上 --say_hello 来激活这个参数后,脚本中 “say_hello” 的值就会变为True。

当然,如果想反过来,让默认值为True,激活后变为False的话,只需要改成:

parser.add_argument('--say_hello', action='store_false')  

最后来说如何调用这些传进来的参数,其实单看代码也很容易理解了,首先是要用到

opt = parser.parse_args()

然后就可以从opt中调用对应的参数了,例如:opt.input_file,opt.save_info以及opt.say_hello。是不是很方便。

总结

依旧是熬夜踩点更新博客,时间比较赶,如果有什么疏漏请尽管指出,保证第一时间改正。最后按照惯例,祝大家变得更强,明天见!

今天的小tips:

  • 一定要住的离公司近一些。亲身经历表明,二十分钟的通勤时间意味着每天下班可以健身、写日记、洗衣服、学习、写博客;一个小时的通勤时间意味着每天下班之后瘫在床上玩手机到半夜。各位晚安。

Guess you like

Origin blog.csdn.net/FANFANHEBAOER/article/details/117392890