用单反斜杠替换字符串文字中的双反斜杠

时间:2017-03-14 19:17:09

标签: python string

我试图打印一个包含双反斜杠的字符串(一个用于逃避另一个反斜杠),这样只打印出一个反斜杠。我认为这会自动发生,但我必须遗漏一些细节。

我有这个小片段:

for path in self.tokenized:
    pdb.set_trace()
    print(self.tokenized[path])

当我使用pdb.set_trace()进行调试时,我可以看到我的字符串有双反斜杠,然后我输入继续打印剩余部分并打印出相同的内容。

> /home/kendall/Development/path-parser/tokenize_custom.py(82)print_tokens()
-> print(self.tokenized[path])
(Pdb) self.tokenized[path]
['c:', '\\home', '\\kendall', '\\Desktop', '\\home\\kendall\\Desktop']
(Pdb) c
['c:', '\\home', '\\kendall', '\\Desktop', '\\home\\kendall\\Desktop']

请注意,我正在编写解析Windows文件路径的解析器 - 因此反斜杠。

这就是运行程序的样子:

kendall@kendall-XPS-8500:~/Development/path-parser$ python main.py -f c:\\home\\kendall\\Desktop

1 个答案:

答案 0 :(得分:2)

您遇到的问题是,您{{}} print一个列表,它只知道一种方法来对其内容进行字符串化:reprrepr仅用于调试用途。惯用,尽可能(类是一个值得注意的例外),它输出一个语法上有效的python表达式,可以直接输入到解释器中以重现原始对象 - 因此转义为反斜杠。

相反,您需要遍历每个列表,并单独打印每个字符串。

您可以使用str.join()为您执行此操作。

要获得完全相同的输出,减去加倍的反斜杠,您需要执行以下操作:

print("[{0}]".format(", ".join(self.tokenized[path])))