2017-06-07 9 views
2

私はコマンドライン引数を解析しようとしています。私はいくつかのことを試しました。以下のコードは私が試した最後のものですが、私は "unrecognized arguments"というエラーを受け取りました。Pythonで引数を任意の順序で解析する

のようなものをコマンドライン上に置くことができますが、どのような順序でも持つことができます。私はこれについてどうやって行くのか分かりません。私のコードは以下の通りです:

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) 
+0

プログラムを 'copy-column-csv.py -cname = Quiz -source = source.csv -target = target.csv -out = out.csv'として実行してみてください。引数の前に '-'があることに注意してください。 –

+0

こんにちはケイト、将来の参考として、あなたの質問タイトルをもう少し具体的にしてみてください。そうすれば、同じ問題を抱えている人は、提供する回答を検索して見つけることができます。何か "PythonでArgumentParserを使って引数をどのように解析するのですか?"私はあなたが探しているものを見つけることを願っています! –

+0

@RocketHazmatああ大丈夫です。そうですか。とにかくあなたはダッシュを使用する必要はありませんか、それとも必要ですか?また、私がこれをすると、渡された議論をどのように参照するのか?たとえばsourceの場合、args.sourceですか? – K22

答えて

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'] 
+0

まあまあまあ、私は辞書の作成については考えていませんでした。私はこれを試してみよう!ありがとう! – K22

+0

@Kate問題ありません!アップヴォートとそれがあなたのために働く場合、答えとしてマーク:) –

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() 

あなたはそれを実行するときに、値がoptions.genome_fileなること--genome = myfile.txtのと、およびコードで、例えば、引数を渡します。

+1

なぜ 'argparse'ではなく' optparse'ですか? –

+0

これは私の使っているもので、個人的な好みです。 argparseには何も問題ありません。 –

+2

注:[optparseは廃止されました](https://docs.python.org/2/library/optparse.html) – CDspace

関連する問題