Python命令行选项用于过滤列中的值

0 投票
1 回答
1133 浏览
提问于 2025-04-18 02:05

我想在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

撰写回答