我可以将"\t"从命令行传递给Python吗?

6
我希望从命令行传递一个参数给Python脚本,以指定我的输入文件是用什么分隔符分隔的(例如“,”或“\t”)。为了灵活性考虑,我想直接在命令行上指定它,而不是将此参数的选项编码到脚本中。例如:

可能是重复问题:
从命令行将元字符作为参数传递给Python

pythonscript.py --in_delimiter "\t" --in_file input.txt

我似乎遇到了一个问题,即在Python接收之前反斜杠被解释了。我尝试添加额外的反斜杠进行转义,但无法使其正常工作。
我的问题是:是否可以从命令行传递类似于"\t"的内容,还是必须使用我在脚本内部解释的代码(例如c =“,”t =“\ t”等)。
感谢您的帮助。

2
虽然它并没有回答更广泛的问题,但对于您特定的情况,一个选项是将制表符设为默认值,只有在分隔符不同时才传递分隔符。 - Amber
Python 接收反斜杠之前被解释有什么问题吗?这难道不意味着程序接收到一个制表符吗? - David Robinson
谢谢Amber,我目前将逗号设置为默认值(在我的数据中更常见),但你是对的,这将解决我的问题... - kanne
你具体遇到了什么问题? - ATOzTOA
你的命令行解释器是什么?在我的解释器中,python -c'import sys; print sys.argv' '\t'传递的\t被解释为两个字符。你可以使用.encode("string-escape")/.decode("string-escape")将Python字节字符串转换成/from形式。 - jfs
David - 我本以为这样做没问题,但实际上,split(in_delimiter) 无法按制表符拆分输入行... - kanne
2个回答

9

您是在使用Bash吗?如果是,请尝试以下命令:

pythonscript.py --in_delimiter $'\t' --in_file input.txt

1
+1,这比我的答案更好,因为你可以“看到”选项卡。 - John La Rooy
很有趣,我刚学习了$'...',在为类似问题苦苦挣扎了几个小时后。当我们在一个Linux脚本中尝试使用#!/bin/sh时,又浪费了一个小时:它不能在sh中工作!但是在bash中可以。 - Pavel Repin
谢谢,这似乎解决了我的问题!顺便说一句,这是个很酷的技巧。 - kanne

2
在Unix/Linux系统中,传递制表符非常容易。你需要将其用引号括起来,因为它是空格字符。
要输入字面意义上的制表符,请使用"ctrl-v tab"命令。
pythonscript.py --in_delimiter "   " --in_file input.txt
                                 ^
                                 | this is `ctrl-v` `tab`

或者你可以为特殊情况创建一个映射。

pythonscript.py --in_delimiter TAB --in_file input.txt

您可以在代码中像这样处理它

in_delimiter = {"TAB": "\t", "COMMA": ","}.get(in_delimiter, in_delimiter)

谢谢你的回答,我之前都不知道呢 :) - kanne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接