背景:
从 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
就是防止转义,来找到正确的文件位置。