2017-08-13 284 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