Python2 判断两个中文字符是否相等_python中表格中的两个中文怎么判断是否相等-程序员宅基地

技术标签: Python专栏  Python  

–首先说一下如何查询字符编码
导入chardet库,调用detect方法即可查询字符编码,但只接受字符串或字节类型,传unicode会报错。

import chardet

a = 'a'
print chardet.detect(a)
{'confidence': 1.0, 'language': '', 'encoding': 'ascii'}

因为Python2默认是ascii编码,我们写代码时虽然会在文件头标记# -*- coding: utf-8 -*- ,但我们在进行字符串切割后再比较时还是会报错,因为要对字符串(包含中文)进行操作后比较是要在unicode编码格式下进行才可以的。
来一发例子:

l1 = [{
    'city': '北京市'}, {
    'city': '天津'}, {
    'city': '上海市'}, {
    'city': '洛阳'}]

a = '市'

for item in l1:
	city = item['city']
	print '=' * 40
	print item['city']
	b = city[-1]
	print b
	if b == a:
		print 'b=a'
		city = city[0:-1]
	
	print '=' * 40
/usr/bin/python2.7 /Users/apple/PycharmProjects/python2_test/test.py
========================================
北京市
�
========================================
========================================
天津
�
========================================
========================================
上海市
�
========================================
========================================
洛阳
�
========================================

Process finished with exit code 0

可以看出并没有把北京市和上海市匹配出来,是因为utf8编码格式下对中文字符串切割会导致编码格式错乱。

我们再将上例中的city解码为unicode试一下

l1 = [{
    'city': '北京市'}, {
    'city': '天津'}, {
    'city': '上海市'}, {
    'city': '洛阳'}]

a = '市'

for item in l1:
	city = item['city'].decode('utf8')
	print '=' * 40
	print item['city']
	b = city[-1]
	print b
	if b == a:
		print 'b=a'
		city = city[0:-1]
	
	print '=' * 40
========================================
北京市
市
========================================
========================================
天津
津
========================================
========================================
上海市
市
========================================
========================================
洛阳
阳
========================================

发现北京市已经打印出来最后一个字符为,但在b==a判断时仍然失败,这是因为此时b为unicode编码,而a为utf8编码,自然是不想等。
那么再修改a的编码为unicode试下:

l1 = [{
    'city': '北京市'}, {
    'city': '天津'}, {
    'city': '上海市'}, {
    'city': '洛阳'}]

a = u'市'	#前面加u则默认为unicode编码

for item in l1:
	city = item['city'].decode('utf8')
	print '=' * 40
	print item['city']
	b = city[-1]
	print b
	if b == a:
		print 'b=a'
		city = city[0:-1]
	print city
	print '=' * 40
========================================
北京市
市
b=a
北京
========================================
========================================
天津
津
天津
========================================
========================================
上海市
市
b=a
上海
========================================
========================================
洛阳
阳
洛阳
========================================

顺带在这里说下Python的encode和decode
之所以有encode和decode,是因为存在一个中间编码unicode,当我们调用decode时,是将一个变量解码为unicode,decode()括号中跟的时变量的原本编码,encode()将unicode编码转换为自己想要的编码格式。如

a = 'a'		# 此时a的编码为ascii
a = a.decode('ascii')	# 将a解码为unicode并赋值给a

# 如果我们这样写,则会报错,因为a的编码不是utf8
a = a.decode('uft8')

decode的作用就是,不管原来什么类型,将它解码为unicode,但原来是什么类型的编码必须知道且填写正确。

encode为对unicode类型进行编码

a = u'a'	# a为unicode编码
a = a.encode('utf8')	# 将a编码为utf8

b = 'b'	#如果有文件头说明`# -*- coding: utf-8 -*-`则为utf8编码,否则为ascii编码
b = b.encode('utf8')	# 则会报错,因为b不为unicode编码,或者不报错但得不到utf8编码
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42427540/article/details/103413751

智能推荐

Redis的三种集群方式_redis集群三种方式-程序员宅基地

文章浏览阅读2.3w次,点赞19次,收藏169次。Redis的常用的集群方式主要有以下3种1:主从复制2:哨兵(Sentinel)3:Cluster一、主从主从其实就是一般包含一个主,一个或多个从,从节点从主节点复制数据,可以实现读写分离,主节点做写,从节点做读。在配置上基本没什么要改的。这里用Linux做演示。//这里启动3个docker,就让5678当主节点吧 docker run -d -p 5678:6379 redis docker run -d -p 5679:6379 redis docker run -d _redis集群三种方式

C语言基础语法scanf_4 输入字符串&混合输入_scanf混合类型输入-程序员宅基地

文章浏览阅读130次。C语言基础语法scanf_4 输入字符串&混合输入_scanf混合类型输入

小伙子用C++代码制作的OpenGL 3D动画茶壶!成功拿下offer_c++ 3d动画-程序员宅基地

文章浏览阅读1.4k次。VC++ 效果,是静态的3D效果,并不能旋转3D图形,因此来说是比较基础级的OpenGL三维生成函数,看上去像是使用了贴图技术,画感不是很细腻,仅供学习参考哦。项目源代码:部分代码:程序运行截图:如果您想学C/C++编程,这里有一节三天的免费的VIP试听课和一份学前资料,加QQ群:1037025565领取。..._c++ 3d动画

关于NetBeans生成可执行exe文件_netbeans可执行文件-程序员宅基地

文章浏览阅读2.7k次。在网上看了很多有关的有用的文章,给大家参考一下1.https://netbeans.org/kb/docs/java/native_pkg_zh_CN.html(NetBeans IDE 中的本机打包(netbeans 官网))结果是生成可安装的程序,就像大家平时安装软件那样,安装后是一个文件夹里面有很多东西,个人觉得不如直接生成exe文件,如22.https://blog.csdn.ne..._netbeans可执行文件

图像拼接代码汇总_图像拼接算法代码-程序员宅基地

文章浏览阅读2.9k次,点赞11次,收藏33次。图像拼接代码汇总_图像拼接算法代码

微信小程序中添加锚点的设置_微信小程序中可以通过a标签加锚吗-程序员宅基地

文章浏览阅读796次。在html中我们可以很轻松的添加锚点设置, 只需要一个# 就可以了,但是在 vue 和 微信小程序这种单页面的程序中怎么办呢,下面以小程序的样例介绍一下, vue的和小程序的开发方式差不多。使用 wx.scrollTo来让页面滚动到位置就可以了 别忘了, boundingClientRect 后面要跟上 .exec() 才可以。很明显, 点击的按钮上我们绑定了一个 bindtap = gotocard 的事件, 下面看一下 事件的执行函数。我们要的效果是 点击上面的名片, 跳转到下面的名片位置。_微信小程序中可以通过a标签加锚吗

随便推点

linux gcc 宏定义 __GNUC__ __GNUC_MINOR__ 版本区分-程序员宅基地

文章浏览阅读6.2k次,点赞4次,收藏11次。今天在看Linux系统编程这本书的代码的时候看到了__GNUC__,不太清楚这个宏所以去查了一下,以此记录。GNU C预定义了一系列的宏,这些宏都是以双下划线开始的,这里只讲一下__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__,完整的GNU C的预定义宏可以到这里查看:https://gcc.gnu.org/onlinedocs/gcc-5.1.0/cp...___gnuc_minor__

解决ImportError: TensorBoard logging requires TensorBoard version 1.15 or above-程序员宅基地

文章浏览阅读5.2k次,点赞10次,收藏17次。解决ImportError: TensorBoard logging requires TensorBoard version 1.15 or above报错信息ImportError: TensorBoard logging requires TensorBoard version 1.15 or above解决办法pip uninstall tensorboard -ypip install tensorboard -i https://pypi.douban.com/simple/S_tensorboard logging requires tensorboard version 1.15 or above 但我的是1.6.0

ng-alain懒加载模块 未添加导致NZ模块未识别Can't bind to 'nzExtra' since it isn't a known property of 'nz-card-程序员宅基地

文章浏览阅读2.2k次。ng-alain懒加载模块 未添加导致NZ模块未识别Can't bind to 'nzExtra' since it isn't a known property of 'nz-card'.1. If 'nz-card' is an Angular component and it has 'nzExtra' input, then verify that it is part of this..._nzextra

Object.create()详解_status_object_create-程序员宅基地

文章浏览阅读2.4k次。Object.create() 方法会使用指定的原型对象及其属性去创建一个新的对象。语法Object.create(proto, [ propertiesObject ])参数proto一个对象,应该是新创建的对象的原型。propertiesObject可选。该参数对象是一组属性与值,该对象的属性名称将是新创建的对象的属性名称,值是属性描述符(这些属性描述符的结构与Obje_status_object_create

python去掉人像白边_python 使用plt画图,去除图片四周的白边方法-程序员宅基地

文章浏览阅读1.9k次。python 使用plt画图,去除图片四周的白边方法用matplotlib.pyplot画的图,显示和保存的图片周围都会有白边,可以去掉。为了显示的更清楚,给图片加了红色的框代码“`import matplotlib.pyplot as pltfig, ax = plt.subplots()im = im[:, :, (2, 1, 0)]ax.imshow(im, aspect='equal')p..._python画图不要坐标轴外白色框

乾坤 微前端_微前端 qiankun 项目实践 !!! 防踩坑指南-程序员宅基地

文章浏览阅读1.7k次。作者:zxh1307导语最近在做微前端的项目 , 过程中真是踩了不少坑 , 在有限的资料中不断试错 , 默默无语两行泪 哈哈. 在此次将采坑部分都记录下来, 让更多的人少走点弯路 , 此项目使用 蚂蚁金服qiankun 为基础作为开发 . 话不多说 开讲 !!!那什么是 qiankun 呢qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单、无痛的..._乾坤 手动刷新页面