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

2025-02-21 08:48:00
admin
原创
22
摘要:问题描述:这当然是一件容易的事,但它确实困扰着我。我有一个脚本,它读取网页并使用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")
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1325  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。它涵盖了从产品概念产生到产品退市的整个生命周期,通过整合跨部门团队、优化流程等方式,显著提升产品开发的效率和质量,进而为项目的成功奠定坚实基础。深入探究IPD流程的五个阶段与项目成功之间...
IPD流程分为几个阶段   4  
  华为作为全球知名的科技企业,其成功背后的管理体系备受关注。IPD(集成产品开发)流程作为华为核心的产品开发管理模式,其中的创新管理与实践更是蕴含着丰富的经验和深刻的智慧,对众多企业具有重要的借鉴意义。IPD流程的核心架构IPD流程旨在打破部门墙,实现跨部门的高效协作,将产品开发视为一个整体的流程。它涵盖了从市场需求分析...
华为IPD是什么   3  
  IPD(Integrated Product Development)研发管理体系作为一种先进的产品开发模式,在众多企业的发展历程中发挥了至关重要的作用。它不仅仅是一套流程,更是一种理念,一种能够全方位提升企业竞争力,推动企业持续发展的有效工具。深入探究IPD研发管理体系如何助力企业持续发展,对于众多渴望在市场中立足并...
IPD管理流程   3  
  IPD(Integrated Product Development)流程管理旨在通过整合产品开发流程、团队和资源,实现产品的快速、高质量交付。在这一过程中,有效降低成本是企业提升竞争力的关键。通过优化IPD流程管理中的各个环节,可以在不牺牲产品质量和性能的前提下,实现成本的显著降低,为企业创造更大的价值。优化产品规划...
IPD流程分为几个阶段   4  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用