2017-08-13 108 views
-2

我有一個列表變量,其中包含一個字符串。出於某種原因,它的打印這樣的:使用轉義字符打印Python字符串列表?

print('Value = ' + str(var)) 

輸出:

Value = [\'123456789\'] 

看來,如果那些被str函數轉義報價添加蜱,但我不知道怎麼弄擺脫他們。

編輯:對不起,我很困惑。這裏是更完整的背景故事:

我正在寫一個聊天分析應用程序。這是我的消息類:

class Message: 
    def __init__(self, name, text, likers): 
     self.name = name 
     self.text = text 
     self.likers = likers 

    def __str__(self): 
     return 'Message: ' + self.name + ' said "' + self.text + '", liked by ' + str(self.likers) 

這是信息存儲在何處:

message = data['response']['messages'][i] 

user_id = message['user_id'] 
name = message['name'] # Sender 
text = re.sub(r'\W+', ' ', str(message['text'])) 
likers = message['favorited_by'] 

msg = Message(name, text, likers) 

users[user_id].messages.append(msg) 

以上,data是一個JSON從聊天服務器返回。 i是我的變量來循環消息(以20的塊接收)。 users是將用戶標識映射到用戶對象(我的其他類)的字典。由於每條消息都可以被多個用戶喜歡,因此likers是一組用戶標識。

當我試圖打印郵件時出現問題。測試代碼:

print([str(x) for x in users[user_names['MyUser']].messages]) 

user_names是用戶名映射到用戶ID的字典)

該代碼打印:

['Message: MyUser said "all of you", liked by [\'25843278\']', 'Message: MyUser said "why?", liked by [\'25843278\']'] 
+0

是什麼var值。 –

+1

你能告訴我們什麼'var'包含? – wencakisa

+0

您的字符串實際上包含反斜槓的可能性很大。 – NPE

回答

0

在你的代碼,likers是字符串列表。

likers = ['25843278'] 

如果使用str,Python將這個列表轉換成一個字符串,像這樣:

text = str(likers) 
print(repr(text)) 
# -> "['25843278']" 

所以,你__str__方法將返回單引號的字符串。

此外,您創建郵件列表:

[str(x) for x in users[user_names['MyUser']].messages] 

Python將打印此列表。它會將每個項目轉換爲其字符串表示。所以它會逃避每個同類的單引號。

爲了避免這種情況,你可以likers名單自己轉換成一個字符串,像這樣:

def __str__(self): 
    return ('Message: ' + self.name + ' said "' + self.text + '", 
      liked by ' + ', '.join(self.likers)) 
+0

當然。我在創建'likers'後立即運行'print('likers ='+ str(likers))',並顯示'likers = ['25843278']'。 – vasilescur

+0

@ user3284178:請使用'repr'函數打印變量的字符串表示形式。 –

+0

好的,'print('likers ='+ repr(message ['favorited_by']))'打印同樣的東西:''likers = ['25843278']'。 – vasilescur