我是 python 和 optparse
模块的新手。我已经想出如何使用 optparse
在 python 脚本中添加选项,但是在将选项与我在 python 中的变量名称链接时遇到了问题。
import sys
from optparse import OptionParser
def main ():
parser = OptionParser()
parser.add_option("-f", "--file", dest="in_filename",
help="Input fasta file", metavar="FILE")
parser.add_option("-o", "--out", dest="out_filename",
help="Output fasta file", metavar="FILE")
parser.add_option("-i", "--id", dest="id",
help="Id name to change", metavar="ID")
(options,args) = parser.parse_args()
with open(f, 'r') as fh_in:
with open(o, 'w') as fh_out:
id = i
result = {}
count = 1
for line in fh_in:
line = line.strip()
if line.startswith(">"):
line = line[1:]
result[line] = id + str(count)
count = count + 1
header = ">" + str(result[line])
fh_out.write(header)
fh_out.write("\n")
else:
fh_out.write(line)
fh_out.write("\n")
main()
当我运行它时,我得到以下回溯和错误:
python header_change.py -f consensus_seq.txt -o consensus_seq_out.fa -i "my_test"
Traceback (most recent call last):
File "/Users/upendrakumardevisetty/Documents/git_repos/scripts/header_change.py", line 36, in <module>
main()
File "/Users/upendrakumardevisetty/Documents/git_repos/scripts/header_change.py", line 18, in main
with open(f, 'r') as fh_in:
NameError: global name 'f' is not defined
谁能指出我做错了什么。
这里有两个问题。
首先,作为the optparse
tutorial显示,optparse
不创建全局变量,它在返回的 options
命名空间中创建属性:
parse_args()
returns two values:
options
, an object containing values for all of your options—e.g. if --file
takes a single string argument, then options.file
will be the filename supplied by the user, or None
if the user did not supply that option
args
, the list of positional arguments leftover after parsing options
因此,如果用户键入 -f
,您将不会得到 f
,您将得到 options.f
.
其次,f
无论如何都不是正确的名称。您明确指定了一个不同的目的地,而不是默认目的地:
parser.add_option("-f", "--file", dest="in_filename",
help="Input fasta file", metavar="FILE")
因此它将按照您的要求执行并将文件存储在 in_filename
中。
对于其他选项也是如此。所以,您的代码应该像这样开始:
with open(options.in_filename, 'r') as fh_in:
with open(options.out_filename, 'w') as fh_out:
我是一名优秀的程序员,十分优秀!