Python 字符串打印为 [u'String']
- 2025-02-21 08:48:00
- admin 原创
- 22
问题描述:
这当然是一件容易的事,但它确实困扰着我。
我有一个脚本,它读取网页并使用Beautiful Soup来解析它。我从Soup中提取所有链接,因为我的最终目标是打印出 link.contents。
我解析的所有文本都是 ASCII。我知道 Python 将字符串视为 unicode,我确信这非常方便,只是在我的小脚本中没有用处。
每次我打印一个包含“字符串”的变量时,[u'String']
屏幕上都会打印出该变量。有没有简单的方法可以将其恢复为 ascii 格式,还是我应该编写一个正则表达式来删除它?
解决方案 1:
[u'ABC']
将是一串单元素的 unicode 字符串列表。Beautiful Soup 总是生成 Unicode。因此,您需要将列表转换为单个 unicode 字符串,然后将其转换为 ASCII。
我不知道您是如何得到单元素列表的;内容成员将是字符串和标签的列表,这显然不是您所拥有的。假设您确实总是得到一个包含单个元素的列表,并且您的测试实际上只是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)
解决方案 2:
您可能有一个包含一个 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)
解决方案 3:
import json, ast
r = {u'name': u'A', u'primary_key': 1}
ast.literal_eval(json.dumps(r))
将打印
{'name': 'A', 'primary_key': 1}
解决方案 4:
如果访问/打印单个元素列表(例如按顺序或过滤):
my_list = [u'String'] # sample element
my_list = [str(my_list[0])]
解决方案 5:
将输出传递给 str() 函数,它将删除 unicode 输出 u''。此外,通过打印输出,它将从中删除 u'' 标签。
解决方案 6:
你真的是这个意思吗u'String'
?
无论如何,难道你不能只str(string)
获取一个字符串而不是一个unicode字符串吗?(对于Python 3来说这应该有所不同,因为所有字符串都是unicode。)
解决方案 7:
[u'String']
是 Python 2 上包含 Unicode 字符串的列表的文本表示。
如果你运行,print(some_list)
那么它就相当于
print'[%s]' % ', '.join(map(repr, some_list))
,即创建一个类型为的 Python 对象的文本表示list
,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 字符的编码)。或者,如果环境使用的编码与硬编码编码不兼容,代码会默默产生乱码(损坏的数据在管道中进一步传递)。
解决方案 8:
使用dir
或type
对“字符串”进行操作来找出它是什么。我怀疑它是 BeautifulSoup 的标签对象之一,打印起来像字符串,但实际上不是字符串。否则,它位于列表中,您需要分别转换每个字符串。
无论如何,您为什么反对使用 Unicode?有什么具体原因吗?
解决方案 9:
encode("latin-1")
对我有帮助:
facultyname[0].encode("latin-1")
- 2025年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)