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

Posted

技术标签:

【中文标题】Python 字符串打印为 [u\'String\']【英文标题】:Python string prints as [u'String']Python 字符串打印为 [u'String'] 【发布时间】:2010-10-10 14:54:55 【问题描述】:

这肯定是一件容易的事,但它真的让我很烦。

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

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

每次我打印出一个包含“字符串”的变量时,我都会在屏幕上打印出[u'String']。有没有一种简单的方法可以将其恢复为 ascii 或者我应该编写一个正则表达式来剥离它?

【问题讨论】:

可能重复的措辞更清晰的问题(和答案):***.com/q/2464959/1390788 这能回答你的问题吗? What's the u prefix in a Python string? 【参考方案1】:

你真的是指u'String'吗?

无论如何,你不能只用str(string) 来获取字符串而不是Unicode 字符串吗? (这对于 Python 3 应该有所不同,因为所有字符串都是 unicode。)

【讨论】:

我应该更清楚。我正在使用 str() 但在打印时仍然得到如下输出。 [u'ABC'] [u'DEF'] [u'GHI'] [u'JKL'] 数据从网页中剥离为文本,然后插入数据库(Google Appstore),然后检索和打印。 【参考方案2】:

在“字符串”上使用dirtype 来找出它是什么。我怀疑它是 BeautifulSoup 的标记对象之一,它像字符串一样打印,但实际上不是。否则,它在一个列表中,您需要单独转换每个字符串。

无论如何,您为什么反对使用 Unicode?有什么具体原因吗?

【讨论】:

最近几天我一直在关注 BeautifulSoup。我不知道 gnuchu 如何得到 u['string'] 而不是 [u'String']。他对 Andrew Jaffe 的评论似乎证明了这是一份清单。【参考方案3】:

[u'ABC'] 将是 unicode 字符串的单元素列表。 Beautiful Soup always produces Unicode。因此,您需要将列表转换为单个 unicode 字符串,然后将其转换为 ASCII。

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

 soup[0].encode("ascii")

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

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


 soup[0].encode("utf-8")

或者你问 Beautiful Soup 原来的编码是什么,然后用这个编码取回:

 soup[0].encode(soup.originalEncoding)

【讨论】:

您实际上不必进行编码,因为 OP 只看到字符串 repr 因为这就是您在打印列表时看到的任何内容。 soup[0] 足以显示 str 而不是 repr,显示字符串的内容而不是引号和 unicode 修饰符。 在大多数情况下,您不应该将表示为 Unicode 的文本编码为字节:您应该直接在 Python 中打印 Unicode:print(', '.join([u'ABC' , u'...']))【参考方案4】:

您可能有一个包含一个 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)

【讨论】:

请避免像repr(x).lstrip('u')[1:-1] 这样的恐怖。改用 print ", ".join(my_list) 之类的东西来格式化 Unicode 字符串列表。 评论中说:“这实际上不是一个好方法”。它只是为了大声笑!【参考方案5】:

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

my_list = [u'String'] # sample element
my_list = [str(my_list[0])]

【讨论】:

你做一个列表理解:my_list = [str(my_list[x]) for x in range(len(my_list))]【参考方案6】:

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

【讨论】:

【参考方案7】:

encode("latin-1") 在我的情况下帮助了我:

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

【讨论】:

【参考方案8】:

[u'String'] 是包含 Python 2 上的 Unicode 字符串的列表的文本表示形式。

如果你运行print(some_list),那么它相当于print'[%s]' % ', '.join(map(repr, some_list)),即创建一个list类型的Python对象的文本表示,为每个项目调用repr()函数。

不要混淆 Python 对象及其文本表示repr('a') != 'a',甚至文本表示的文本表示也不同:repr(repr('a')) != repr('a')

repr(obj) 返回一个字符串,其中包含对象的可打印表示。它的目的是在 REPL 中明确表示可用于调试的对象。经常eval(repr(obj)) == obj

为避免调用 repr(),您可以直接打印列表项(如果它们都是 Unicode 字符串),例如:print ",".join(some_list)——它会打印一个逗号分隔的字符串列表:String

不要使用硬编码字符编码将 Unicode 字符串编码为字节,而是直接打印 Unicode。否则,代码可能会失败,因为编码不能代表所有字符,例如,如果您尝试将 'ascii' 编码与非 ascii 字符一起使用。或者,如果环境使用与硬编码不兼容的编码,则代码会静默生成 mojibake(损坏的数据在管道中进一步传递)。

【讨论】:

【参考方案9】:
import json, ast
r = u'name': u'A', u'primary_key': 1
ast.literal_eval(json.dumps(r)) 

将打印

'name': 'A', 'primary_key': 1

【讨论】:

这个方法对我来说看起来很甜蜜,为什么没有投票?我们应该担心什么性能影响? 只使用import json 然后print json.dumps(myVar) 对我有用,谢谢! ast 在我的情况下甚至不需要。 json.dumps 解决了我的问题。谢谢【参考方案10】:

也许我不明白,为什么你不能直接获取 element.text 然后在使用前转换它? 例如(不知道你为什么要这样做,但是......) 找到网页的所有标签元素并在它们之间迭代,直到找到一个名为 MyText 的元素

        avail = []
        avail = driver.find_elements_by_class_name("label");
        for i in avail:
                if  i.text == "MyText":

从 i 转换字符串并做任何你想做的事情...... 也许我在原始消息中遗漏了一些东西? 或者这就是你要找的东西?

【讨论】:

你错过了问题是关于如何“从 i 转换字符串”的部分。 ahhh ,感谢所有 cmets 我认为问题在于获得要转换的价值 但公平地说 i.text 是实际的字符串值,如果标签元素的文本值为 [ u'String'] i.text 将是字符串

以上是关于Python 字符串打印为 [u'String']的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Python 中将函数打印为字符串? [复制]

Python re.findall 将输出打印为列表而不是字符串

当默认编码为 ASCII 时,为啥 Python 会打印 unicode 字符?

如何在 Python 中使用 json.dumps() 将整数打印为十六进制字符串

python Python 3在打印XML DOM文档时出现了皱纹,因为数据类型为字节,必须显式解码为字符串。这里

python中的字符串