【发布时间】:2012-09-02 07:58:49
【问题描述】:
我编写了一个简单的脚本作为我的awk/sed 要求的高级工具。在脚本中,我根据查询文件的一列中的值比较两个文件,然后从主文件中提取整个条目。该脚本允许您为每个文件输入列值和分隔符。
问题是从命令行给出的“分隔符”选项无法被脚本识别。
这是我的代码(部分):
##- - - - - - - -- - - - - - Arguments - - - - - - - - - - - - - -##
parser = argparse.ArgumentParser()
## Command line options
parser.add_argument("-m", "--master", dest="master", help="master file")
parser.add_argument("-q", "--query", dest="query", help="queries to be extracted")
parser.add_argument("-d", "--delimiter", dest="delimiter", default='\t', help="delimiter in master")
parser.add_argument("-p", "--position", dest="position", default='1', help="position/column of value in master")
parser.add_argument("-d2", "--delimiter2", dest="delimiter2", default='\t', help="delimiter in query")
parser.add_argument("-p2", "--position2", dest="position2", default='1', help="position/column of value in query")
args = parser.parse_args()
def Extractor(master, query):
out_file = ('%s_matched_%s' % (query,master))
fh_out = open(out_file, 'w')
query_set = () ## To unique query set
for i in query:
key = i.split('args.delimiter2')[int(args.position2)] ## Key is the value on which matching will be done
query_set.add(key)
如您所见,我从命令行选择“查询文件”分隔符,并通过argparse 在脚本中使用它们,但这不起作用。仅当我在脚本中明确提及分隔符时才有效,例如:
key = i.split('\t')[args.position2] ## Key is the value on which matching will be done
我给出的命令行选项是:
$ py3 ExtractHeaders_v01.py -m ABC.csv -q XYZ.list -d2 \t -d , -p 1 -p2 0
在哪里
-
ABC.csv是从中提取条目的主文件。- 第二列将用于匹配 (
-p 1) - 它的分隔符是逗号 (
-d ,)
- 第二列将用于匹配 (
-
XYZ.list是查询文件。- 第一列将用于匹配 (
-p2 0) - 它的分隔符是制表符(
-d2 \t)
- 第一列将用于匹配 (
请帮助我理解为什么从命令行给出分隔符时脚本不使用分隔符。
【问题讨论】:
标签: python command-line-arguments delimiter argparse