gpt4 book ai didi

python - 如何在 python 3 中模拟 python 2 str.lower()

转载 作者:太空狗 更新时间:2023-10-30 01:10:57 25 4
gpt4 key购买 nike

python 2.7.15 和 3.7.2 执行小写操作的方式似乎有所不同。

我有一个大字典和一个大列表,它们是使用 python 2 编写的,但我想在 python 3 中使用它们(使用 pickle 从文件导入)。对于字符串列表中的每一项,在 python2 lower() 案例的字典中都有一个键。不幸的是,它们与 python3 lower() 的情况不同。

在 python 3 中运行时,我如何才能得到 python 2 返回给 unicode.lower() 的答案?

来自 python 3 的列表中的一个字符串示例是 'İle',其小写字母是 'i̇le'(顺便说一下,它不是 ascii '文件')。这个字典里没有。从 pickle 中,python 3 读取为 "İle" 的内容被读取到 python 2 中为 u'\u0130le',其小写为 "ile"(ascii 字符串),在字典中。这就是我需要返回的内容。

为了澄清,我添加了一个示例(后者是 ascii 字符串)。

python 2.7:

>>> u"\u0130le".lower() == "ile"
>>> True

python 3.7:

>>> u"\u0130le".lower() == "ile"
>>> False

最佳答案

蛮力解决方案。

在Python2中创建下图,然后在Python3中使用它。

创建 map 的 Python2 程序:

f = open('py2_lower_map', 'w')

for i in range(256):
for j in range(256):
b = chr(j) + chr(i)
try:
low = b.decode('utf16').lower()
except:
low = str('?')
f.write(low.encode('utf-8'))

f.close()

Python3中 map 的使用演示:

f = open('py2_lower_map', 'r', encoding='utf-8')
_py2_lower_map = f.read()
f.close()

def py2_lower(u):
return ''.join(_py2_lower_map[ord(c)] for c in u)

low = py2_lower('İle')
print(low)
print([ord(c) for c in low])

老实说,这可能有粗糙的角落,而且又快又脏,但主要是做正确的事。它适用于一个示例 ;-)

关于python - 如何在 python 3 中模拟 python 2 str.lower(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54753761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com