系列文章目录
python数据分析学习第4天记录
- 系列文章目录
- 前言
- 一、今天所学的内容
- 二、python知识点详解
- 1.安装与导入
- 2.基本用法
- 总结
前言
对于新手而言,还有什么比命令行传参更酷的呢?
一、今天所学的内容
我们常常需要用同一个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:
- 一定要住的离公司近一些。亲身经历表明,二十分钟的通勤时间意味着每天下班可以健身、写日记、洗衣服、学习、写博客;一个小时的通勤时间意味着每天下班之后瘫在床上玩手机到半夜。各位晚安。