当前位置: 首页 > 面试题库 >

python中具有unicode数据的string.translate()

壤驷子安
2023-03-14
问题内容

我有3个API,可以将json数据返回3个字典变量。我从字典中获取一些值来处理它们。我在列表中读取了想要的特定值valuelist。步骤之一是从中删除标点符号。我通常string.translate(None, string.punctuation)用于此过程,但是由于字典数据是unicode,因此出现错误:

    wordlist = [s.translate(None, string.punctuation)for s in valuelist]
TypeError: translate() takes exactly one argument (2 given)

有没有解决的办法?通过编码unicode或替换string.translate


问题答案:

在Unicode对象上,translate方法的工作方式不同于在字节字符串对象上:

>>>帮助(unicode.translate)

S.translate(table)-> unicode

返回字符串S的副本,其中所有字符均已映射
通过给定的转换表,该表必须是
从Unicode序号到Unicode序号,Unicode字符串或无。
未映射的字符保持不变。字符映射为无
被删除。

因此,您的示例将变为:

remove_punctuation_map = dict((ord(char), None) for char in string.punctuation)
word_list = [s.translate(remove_punctuation_map) for s in value_list]

但是请注意,string.punctuation仅包含ASCII标点符号。完全Unicode具有更多的标点符号字符,但这全部取决于您的用例。



 类似资料:
  • 问题内容: 现在,我将elixir与mysql数据库一起使用,并将redispy与redis一起使用,并在所有位置选择UTF-8。我想用中文写一些数据,但是我得到的是这样的: 在我将该字典存储到redis并通过redispy将其取出后,它变为: 我知道如果我加入之前,并打印它会守我,但有一个功能或另一个解决这个问题? 问题答案: 后者看起来像json,请先尝试对其进行解码:

  • 问题内容: 我首先尝试使用python将字符串存储在sqlite中,并得到以下消息: sqlite3.ProgrammingError:除非使用可以解释8位字节串的text_factory(如text_factory = str),否则不得使用8位字节串。强烈建议您改为将应用程序切换为Unicode字符串。 好的,我切换到Unicode字符串。然后我开始收到消息: sqlite3.Operatio

  • 问题内容: AFAIK,Python(v2.6)csv模块默认情况下无法处理unicode数据,对吗?在Python文档中,有一个有关如何从UTF-8编码文件读取的示例。但是此示例仅将CSV行作为列表返回。我想按名称访问行列,但方法是使用UTF-8编码的CSV输入文件。 谁能告诉我如何有效地做到这一点?我将必须处理100兆字节大小的CSV文件。 问题答案: 我自己想出了一个答案: 注意:此信息已更

  • 问题内容: 嗨,假设我有字符串 请注意转义的反斜杠。 如何将其转换为相应的unicode字符串? 问题答案: print ‘test \u0259’.decode(‘unicode-escape’) test ə

  • 问题内容: 我在Windows下的Python脚本中在以unicode命名的文件夹之间移动以unicode命名的文件时遇到了麻烦… 您将使用什么语法在文件夹中查找* .ext类型的所有文件并将其移至相对位置? 假设文件和文件夹是unicode。 问题答案: 基本问题是Unicode和字节字符串之间未转换的混合。解决方案可以转换为单一格式,也可以避免一些麻烦而避免出现问题。我所有的解决方案都包含和标

  • 问题内容: 我在对 路径 变量进行编码并将其插入 SQLite 数据库时遇到问题。我试图用无济于事的 encode(“ utf-8”) 函数解决此问题。然后,我使用 unicode() 函数为我提供 unicode 类型。 最终我获得了 unicode 类型,但是当 path 变量的类型为 str 时,仍然出现相同的错误 __ sqlite3.ProgrammingError:除非使用可以解释8位