今天我写了一个 Python 脚本来处理数据并以自定义格式打印它们。它在交互式 Python 下按预期工作。然后我继续尝试在终端中将输出重定向到文本文件,但遇到了一些意想不到的事情。
我尝试的特定示例是按列排列数据列表,并以 LaTeX 表格格式打印它们。它的工作原理或多或少类似于:
foo(mylist, sep_col='\t', sep_row=r'\\ \hline')
当我尝试在终端中运行脚本时,我这样做了:
$ python -c "from foo import foo; foo(mylist, col_sep=' & ', row_sep=r' \\ \hline')" > results.txt
但结果发现\\\hline部分显示为\\hline,这和交互式Python下不太一样。
当我深入研究这个问题(或者背后的原理)时,我发现在交互式 Python 下,$ python -c 处理的 Python 脚本的行为是不一样的。
在交互式 Python 下:>>> print r'\\' 给出 \\
但是,在终端中,$ python -c "print r'\\'" 引发了一个SyntaxError:
File "<string>", line 1
print r'\'
^
SyntaxError: EOL while scanning string literal
当反斜杠的数量为 3 或 4 时,终端似乎给出 \\。数字 5 或 6 引发错误。 7个反斜杠给\\\\,意思是这个环境下没办法给\\\
这个问题找了好久,好像很少有人讲$ python -c。如果我复制了,请提前道歉。
请您参考如下方法:
在终端中,说:
$ python -c "print r'\\'"
File "<string>", line 1
print r'\'
^
SyntaxError: EOL while scanning string literal
导致错误,因为 shell 起作用了。它将 \\ 转换为\(仔细查看错误消息)。
相反,说
$ python -c 'print r"\\"'
\\
从 shell 运行时,即在单引号中提供命令,在双引号中提供 print 的参数。
您在交互模式下执行的命令的等价物是:
$ python -c "print r'\\\\'"
\\
编辑:This答案解释了为什么原始字符串不能有奇数个反斜杠。
而且这个在官方FAQ中也有说明.
