2017-03-14 212 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

完美,謝謝 –

相關問題