Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python3中的解析器不通过argparse从命令行获取分隔符值_Python_Command Line Arguments_Delimiter_Argparse - Fatal编程技术网

python3中的解析器不通过argparse从命令行获取分隔符值

python3中的解析器不通过argparse从命令行获取分隔符值,python,command-line-arguments,delimiter,argparse,Python,Command Line Arguments,Delimiter,Argparse,我已经为我的awk/sed需求编写了一个简单的脚本作为高级工具。在脚本中,我根据查询文件的一列中的值比较两个文件,然后从主文件中提取整个条目。该脚本允许您为每个文件输入列值和分隔符 问题在于,当从命令行发出“分隔符”选项时,脚本无法识别该选项 这是我的代码(部分): 如您所见,我从命令行获取“query file”分隔符的选项,并通过argparse在脚本中使用它们,但这不起作用。只有在脚本中明确提到分隔符时,它才会起作用,如: key = i.split('\t')[args.position

我已经为我的
awk
/
sed
需求编写了一个简单的脚本作为高级工具。在脚本中,我根据查询文件的一列中的值比较两个文件,然后从主文件中提取整个条目。该脚本允许您为每个文件输入列值和分隔符

问题在于,当从命令行发出“分隔符”选项时,脚本无法识别该选项

这是我的代码(部分):

如您所见,我从命令行获取“query file”分隔符的选项,并通过
argparse
在脚本中使用它们,但这不起作用。只有在脚本中明确提到分隔符时,它才会起作用,如:

key = i.split('\t')[args.position2] ## Key is the value on which matching will be done
我给出的命令行选项是:

$py3 ExtractHeaders\u v01.py-m ABC.csv-q XYZ.list-d2\t-d,-p1-p20
在哪里

  • ABC.csv
    是从中提取条目的主文件。
    • 第二列将用于匹配(
      -p1
    • 它的分隔符是逗号(
      -d,
  • XYZ.list
    是查询文件。
    • 第一列将用于匹配(
      -p2 0
    • 它的分隔符是tab(
      -d2\t

请帮助我理解脚本在命令行中给出分隔符时为什么不使用分隔符。

您的shell正在解释命令行中的
\t
,传递给Python的很可能是单个
t
。请尝试
\\t
'\t'
将文本双字符转义序列放入
argv
。然后需要在Python中取消对该字符串的scape:

delimiter = delimiter.decode("string-escape") 

您还可以通过按
Ctrl+V
,然后按
Tab
(单引号或双引号)传递*nix shell中的
Tab
字符(例如bash),即键入
Ctrl+V

也可以使用带引号的字符串
$'\t'
,无论
readline
是否处于活动状态,它都在
bash
中工作。更好的选项。很高兴知道!这似乎是一个确切的解决方案,但您能告诉我在上面的脚本中将“delimiter=delimiter.decode(“字符串转义”)”放在哪里吗?这是我尝试的:args.delimiter=args.delimiter.decode(“”)args.delimiter2=args.delimiter2.decode(“”)…但出现错误:args.delimiter=args.delimiter.decode(“”)NameError:未定义名称“args”
delimiter = delimiter.decode("string-escape")