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

2025-02-21 08:48:00
admin
原创
24
摘要:问题描述:这当然是一件容易的事,但它确实困扰着我。我有一个脚本,它读取网页并使用Beautiful Soup来解析它。我从Soup中提取所有链接,因为我的最终目标是打印出 link.contents。我解析的所有文本都是 ASCII。我知道 Python 将字符串视为 unicode,我确信这非常方便,只是在...

问题描述:

这当然是一件容易的事,但它确实困扰着我。

我有一个脚本,它读取网页并使用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 对象的文本表示listrepr()为每个项目调用函数。

不要混淆 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:

使用dirtype对“字符串”进行操作来找出它是什么。我怀疑它是 BeautifulSoup 的标签对象之一,打印起来像字符串,但实际上不是字符串。否则,它位于列表中,您需要分别转换每个字符串。

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

解决方案 9:

encode("latin-1")对我有帮助:

facultyname[0].encode("latin-1")
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1343  
  信创产业的蓬勃发展推动着各行业数字化转型加速,数据库迁移作为其中关键一环,面临诸多挑战。信创数据库迁移旨在将传统数据库平稳过渡到信创环境,以满足自主可控、安全可靠的需求。这一过程涉及技术、业务等多方面因素,稍有不慎就可能出现各种问题,影响业务的正常运行。深入探讨信创数据库迁移过程中的常见问题及解决方案,对于保障迁移工作...
2027年信创国产化   41  
  随着信息技术的飞速发展,信创国产化成为了国家战略的重要组成部分。国产化信创产品名录涵盖了众多领域,其在各个关键应用场景中发挥着重要作用。而信创国产化操作系统作为其中的核心环节,具备五大核心优势,为我国信息技术产业的自主可控发展提供了坚实支撑。关键应用场景之办公领域在办公领域,国产化信创产品有着广泛且深入的应用。如今,越...
国产信创系统   37  
  随着信息技术的飞速发展,信创国产化操作系统在政府部门的推广应用具有重要的战略意义。它不仅关乎国家信息安全,更是推动国内信息技术产业自主创新、实现科技自立自强的关键举措。在当前复杂的国际形势下,政府部门积极推广信创国产化操作系统,对于保障国家政务信息的安全稳定运行,提升信息技术的自主可控能力,具有不可替代的重要作用。推广...
信创产品有哪些   28  
  在企业数字化转型的进程中,信创数据库解决方案的选择至关重要。它不仅关乎企业数据的安全存储与管理,更影响着企业业务的稳定运行与未来发展。合适的信创数据库能够助力企业在复杂多变的市场环境中提升竞争力,保障数据主权与安全。然而,面对市场上众多的信创数据库产品和解决方案,企业往往感到困惑,不知如何做出正确的选择。接下来,我们将...
信创电脑   24  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用