Python字符串打印为[u'String']

gnu*_*chu 133 python unicode ascii

这肯定是一个简单的,但它真的很烦我.

我有一个脚本可以读入网页并使用Beautiful Soup来解析它.从汤中我提取所有链接,因为我的最终目标是打印出link.contents.

我正在解析的所有文本都是ASCII.我知道Python将字符串视为unicode,我确信这非常方便,只是在我的小脚本中没用.

每次我打印出一个包含'String'的变量时,我都会[u'String']打印到屏幕上.是否有一种简单的方法可以将其恢复为ascii,还是应该编写正则表达式来删除它?

oef*_*efe 112

[u'ABC']将是unicode字符串的单元素列表.美丽的汤总是产生Unicode.因此,您需要将列表转换为单个unicode字符串,然后将其转换为ASCII.

我不知道你是如何获得单元素列表的; 内容成员将是一个字符串和标签列表,这显然不是你拥有的.假设你总是得到一个包含单个元素的列表,并且你的测试实际上只是 ASCII,你会使用这个:

 soup[0].encode("ascii")
Run Code Online (Sandbox Code Playgroud)

但是,请仔细检查您的数据是否真的是ASCII.这非常罕见.更有可能是latin-1或utf-8.

 soup[0].encode("latin-1")


 soup[0].encode("utf-8")
Run Code Online (Sandbox Code Playgroud)

或者你问Beautiful Soup原始编码是什么,并在此编码中取回它:

 soup[0].encode(soup.originalEncoding)
Run Code Online (Sandbox Code Playgroud)

  • 实际上你不必进行编码,因为OP只看到字符串repr,因为这就是你在打印列表时看到的东西.汤[0]将足以显示str而不是repr,显示字符串的内容而不是quote和unicode修饰符. (6认同)
  • 在大多数情况下,您不应该将表示为Unicode的文本编码为字节:您应该直接在Python中打印Unicode:[`print(','.join([u'ABC',u'...'])) ](http://stackoverflow.com/a/36891685/4279) (2认同)

dda*_*daa 25

您可能有一个包含一个unicode字符串的列表.在repr此是[u'String'].

您可以使用以下任何变体将其转换为字节字符串列表:

# Functional style.
print map(lambda x: x.encode('ascii'), my_list)

# List comprehension.
print [x.encode('ascii') for x in my_list]

# Interesting if my_list may be a tuple or a string.
print type(my_list)(x.encode('ascii') for x in my_list)

# What do I care about the brackets anyway?
print ', '.join(repr(x.encode('ascii')) for x in my_list)

# That's actually not a good way of doing it.
print ' '.join(repr(x).lstrip('u')[1:-1] for x in my_list)
Run Code Online (Sandbox Code Playgroud)

  • 列表理解胜利 (4认同)
  • 评论中说:“这实际上不是一个好方法”。这只是为了lolz! (2认同)

小智 8

import json, ast
r = {u'name': u'A', u'primary_key': 1}
ast.literal_eval(json.dumps(r)) 
Run Code Online (Sandbox Code Playgroud)

将打印

{'name': 'A', 'primary_key': 1}
Run Code Online (Sandbox Code Playgroud)

  • 这种方法对我来说看起来很不错,为什么没有投票?我们应该担心任何性能影响? (2认同)

gev*_*ang 7

如果访问/打印单个元素列表(例如,顺序或过滤):

my_list = [u'String'] # sample element
my_list = [str(my_list[0])]
Run Code Online (Sandbox Code Playgroud)

  • 如果`my_list = [u'String',u'String',u'String',u'String']`看起来像这样... (2认同)

waw*_*eru 5

将输出传递给 str() 函数,它将删除 unicode 输出 u''。同样通过打印输出,它将从中删除 u'' 标签。