我试图打印一个包含双反斜杠的字符串(一个用于逃避另一个反斜杠),这样只打印出一个反斜杠。我认为这会自动发生,但我必须遗漏一些细节。
我有这个小片段:
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
答案 0 :(得分:2)
您遇到的问题是,您{{}} print
一个列表,它只知道一种方法来对其内容进行字符串化:repr
。 repr
仅用于调试用途。惯用,尽可能(类是一个值得注意的例外),它输出一个语法上有效的python表达式,可以直接输入到解释器中以重现原始对象 - 因此转义为反斜杠。
相反,您需要遍历每个列表,并单独打印每个字符串。
您可以使用str.join()
为您执行此操作。
要获得完全相同的输出,减去加倍的反斜杠,您需要执行以下操作:
print("[{0}]".format(", ".join(self.tokenized[path])))