使用任何顺序

时间:2017-06-07 14:40:24

标签: python parsing command-line

我正在尝试解析命令行参数,而我之前从未这样做过。我尝试了一些事情。下面的代码是我尝试的最后一件事,但我收到了错误:"无法识别的参数"。我希望能够提供像

这样的东西
copy-column-csv.py cname=Quiz source=source.csv target=target.csv out=out.csv

在命令行上,但也能够以任何顺序拥有它。我不知道该如何解决这个问题。以下是我的代码:

import argparse
import sys, re
import numpy as np
import smtplib
from random import randint
import csv
import math
import pandas as pd

parser = argparse.ArgumentParser()
parser.add_argument('-cname')
parser.add_argument('-source')
parser.add_argument('-target')
parser.add_argument('-out')
args = parser.parse_args()


#col = sys.argv[1]
#source = sys.argv[2]
#target = sys.argv[3]
#newtarg = sys.argv[4]


sourceFile = pd.read_csv(source)
targetFile = pd.read_csv(target)
del targetFile[cname]
targetFile[col] = pd.Series(sourceFile[col])
targetFile.to_csv(out, index = False)

2 个答案:

答案 0 :(得分:1)

假设结构良好的参数,您可以将sys.argv拆分为字典:

args_dict = {}
for arg in sys.argv[1:]:
    split = arg.split('=')
    args_dict[split[0]] = split[1]

args_dict将如下所示:

{'cname': 'Quiz',
 'out': 'out.csv',
 'source': 'source.csv',
 'target': 'target.csv'}

你可以像这样访问元素:

print args_dict['cname']
print args_dict['out']
print args_dict['source']
print args_dict['target']

答案 1 :(得分:0)

这是我如何做的一个例子。

from optparse import OptionParser
from optparse import OptionGroup

parser = OptionParser(usage)

required = OptionGroup(parser, "Required Arguments")
required.add_option("--genome", dest="genome_file", help="File representing genome. FASTA nucleotide format. ")
required.add_option("--anno", dest="anno_file", help="File containing genome annotation information in GTF/GFF3 format. ")
required.add_option("--output", dest="prefix", help="Creates a folder named with the supplied prefix containing output files. ")

parser.add_option_group(required)

if len(args) != 0 or not options.genome_file or not options.anno_file or not options.prefix:
    parser.error("Required arguments have not been supplied.  \n\t\tUse -h to get more information.")
    sys.exit()

运行时会传递参数,例如,使用--genome = myfile.txt,并且代码中的值变为options.genome_file。