2017-03-14 213 views
0

我试图打印一个包含双反斜杠(一个转义另一个)的字符串,以便只打印其中一个反斜杠。我认为这会自动发生,但我必须错过一些细节。用单个反斜杠替换字符串文字中的双反斜杠

我有这个小片段:

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文件路径 - 因此是反斜杠。

这是什么样子来运行程序:

[email protected]:~/Development/path-parser$ python main.py -f c:\\home\\kendall\\Desktop 
+2

使用''打印代替。现在,你的字符串不是'print'' – inspectorG4dget

+0

..而是嵌套在列表中的字符串,你会得到'repr(string)',它有反斜杠转义。 – dhke

+0

@ inspectorG4dget是否有一种干净的方式来添加方括号,就好像它是一个列表 –

回答

1

您遇到的问题是,你是print荷兰国际集团名单,只知道到字符串化其内容的一种方式:reprrepr仅用于调试使用。在可能的情况下(类是一个明显的例外),它会输出一个语法上有效的python表达式,它可以直接输入解释器来重现原始对象 - 因此可以避免反斜杠。

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

您可以使用str.join()为您做到这一点。

要得到完全相同的输出,减去一倍反斜杠,你需要做的是这样的:( '' 加盟(self.tokenized [路径]))

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

完美,谢谢 –

相关问题