我已经编写了一个简单的脚本作为我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
)
- 第一列将用于匹配 (
请帮助我理解为什么从命令行给出分隔符时脚本不使用分隔符。