jtb*_*tbr 5 python python-2.7 python-3.x
python 2.7.15和3.7.2如何执行小写操作之间似乎有区别.
我有一个大字典和一个大型列表,使用python 2编写,但我想在python 3中使用(使用pickle从文件导入).对于字符串列表中的每个项目,在python2 lower()案例的dict中有一个键.不幸的是,它们与python3 lower()案例不同.
unicode.lower()在python 3中运行时,如何获得python 2返回的答案?
python 3列表中的字符串示例是'?le',其小写字母是'i?le'(顺便说一下,它不是ascii 'ile').这不在字典中.从泡菜,3为读取什么蟒"?le"被读入蟒2作为u'\u0130le',小写其中是"ile"(将ASCII字符串),它是在字典.这就是我需要回归的东西.
为了澄清,我正在添加一个例子(后者是ascii字符串).
python 2.7:
>>> u"\u0130le".lower() == "ile"
>>> True
Run Code Online (Sandbox Code Playgroud)
python 3.7:
>>> u"\u0130le".lower() == "ile"
>>> False
Run Code Online (Sandbox Code Playgroud)
蛮力解决方案。
\n\n在Python2中创建一个较低的地图,然后在Python3中使用它。
\n\n创建地图的Python2程序:
\n\nf = open('py2_lower_map', 'w')\n\nfor i in range(256):\n for j in range(256):\n b = chr(j) + chr(i)\n try:\n low = b.decode('utf16').lower()\n except:\n low = str('?')\n f.write(low.encode('utf-8'))\n\nf.close()\nRun Code Online (Sandbox Code Playgroud)\n\nPython3中如何使用地图的demo:
\n\nf = open('py2_lower_map', 'r', encoding='utf-8')\n_py2_lower_map = f.read()\nf.close()\n\ndef py2_lower(u):\n return ''.join(_py2_lower_map[ord(c)] for c in u)\n\nlow = py2_lower('\xc4\xb0le')\nprint(low)\nprint([ord(c) for c in low])\nRun Code Online (Sandbox Code Playgroud)\n\n老实说,这可能有粗糙的角落,而且又快又脏,\n但主要是做正确的事情。它适用于一个示例;-)
\n