背景:
从 shell 传给 python 脚本了一个 \t 分隔符,本来以为会按照 \t 分割,结果发现,Python 会把这个当做字符串,怎么都不行。
1  | if [[ ! "$5" ]];then  | 
如下所示,原始数据,并没有被 \t 分割。
1  | \t  | 
真是奇怪了, python 里面就是用 \t 标识制表符啊,怎么回事儿? 
解决:
解决方法1:
通过 if 判断发现, \t 并不会被当做制表符。delimiter 打印出来看上去是 \t ,但是判断是否和 "\t" 相等的时候,发现就是不行,怎么办呢?经过尝试,发现下面方式可以判断,使用 “\t” 即可。
1  | if "\\t" == str(delimiter):  | 
所以我们就明白了,通过 shell 传入的实际上是经过转义的 \t(制表符), 前面是附加了  \ 的。 所以,我们要去除转义。如上所示,使用 if 判断,特殊处理即可。
解决方法2:
明白上面问题之后,我们还可以通过去除转义来解决问题,
1  | delimiter = sys.argv[5].decode("string_escape")  | 
如上所示,通过 .decode(“string_escape”) 来去掉转义,之后就能正常作为分割符了。
另外,如果是纯字符串,也可以使用 r 来防止转义。我们读取文件的时候,经常看到下面写法:  with open(r"a/b/c.txt" )   这里面的 r 就是防止转义,来找到正确的文件位置。