Python命令行选项用于过滤列中的值
我想在Python中写一个函数,用来处理一个以制表符分隔的文件,目的是过滤掉某一列中不符合条件的值,并且在运行脚本时把这个条件作为命令行参数传入。
比如说,如果条件是10,那就过滤掉所有小于10的行。同时,我还想检查输入的数字是否是数字,如果不是,就显示“这不是数字”的提示。
所以,命令行的格式应该是:
python script.py file --quality [limit]
Python脚本:
import sys
arg = []
for a in sys.argv:
arg.append(a)
quality = arg[2]
更具体一点,我处理的文件是一个Sam文件,使用的包是Pysam,这个包的第五列有映射质量的限制。
https://media.readthedocs.org/pdf/pysam/latest/pysam.pdf
命令行:
python script.py samfile --quality [limit]
我用这个方法来读取sam文件:
samfile = pysam.Samfile(arg[1], "rb" )
mapqlim = arg[2]
我还是Python初学者,但看到有一个模块叫argparse。我该如何用argparse来实现这个功能呢?
检查是否为数字的函数
def is_number(s):
try:
val = int(s)
except ValueError:
print "That is not an int!"
如果传入多个命令行参数,还需要检查它们是否是数字。
is_number(args.quality)
is_number(args.count)
我写了一个函数来检查是否是数字,不过我想在其中如果有参数不是数字时,打印出“质量不是整数”或“计数不是整数”,而不是简单地打印“那不是整数”。
1 个回答
1
这里有一个argparse的教程
如果你想获取在命令行中输入的参数,代码大概是这样的:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--quality", help="enter some quality limit")
args = parser.parse_args()
print "You gave quality = %s" % str(args.quality)
简单来说,你需要给你的“解析器”添加一些参数。然后你就可以解析这些参数。最后得到的结果是一个对象,这个对象里面有一些属性,属性的值就是你所期待的。
我把这个保存为a.py
,然后运行了这个:
$ python a.py --quality 10
You gave quality = 10