-
2020-11-24 10:48:04
刚开始学习python的时候,都是对这英文的翻译书学习的。没有解除到中文编码的相关问题,直到自己用python去做相关的项目的时候才发先中文编码问题真的非常头疼啊。这里分享一下本人所了解的一些经验。
读取utf-8个格式存储的文件
1. 假如现在有一个文件test.txt,里面有内容“python学习”,该文件以utf-8格式存储。那么读取并输出该字符串的方法如下:
filehandle=open("test.txt","r")## the file is saved as utf-8 without bom
print filehandle.read().decode("utf-8").encode("gbk")
filehandle.close()
上面的代码decode("utf-8")是把utf-8格式的内容解码成unicode编码,然后通过encode("gbk")转换成GBK格式输出。
2. 假如test.txt是以utf-8 含有BOM的格式存储,读入方式又不一样,这种格式会在文件最开始的地方插入看不见的字符BOM(即0xEF 0xBB 0xBF),需要用到codecs。(用notepad++可以选择将文件保存为utf-8,utf-8无BOM等个存储格式)
filehandle=open("test.txt","r")## the file is saved as utf-8 with bom
content =filehandle.read()if content[:3]==codecs.BOM:
content=content[3:]print content.decode("utf-8")#.encode("gbk")
filehandle.close()
这边为什么不需要用到encode("gbk")?很费解
读取ASNI格式存储的文件
这种就非常简单了,不需要任何转换
filehandle=open("test.txt","r")## the file is saved as ASNI
content =filehandle.read()printcontent
filehandle.close()
python脚本中包含hardcode的中文
#!/usr/bin/env python
defmain():
s="python学习"
printsif __name__ == '__main__':
main()
python中默认的编码方式是ASCII(可以通过sys.getdefaultencoding()),上面的test.py文件是以ASCII格式保存的,当调用print的时候会隐式地进行从ASCII到系统默认编码(Windows上为CP936,可以通过sys.stout.encoding)的转换,中文字符并不是ASCII,所以需要在test.py文件中进行编码声明。需要在开头加上一句 "# coding=utf-8"即可(最好用文本编辑器或notepad++,不然可能会有意想不到的输出)
总之,最好避免在脚本源文件中试用hardcode的字符串,尤其是中文字符。
普通字符和中文字符进行字符串连接
#coding=utf-8
defmain():
s="python学习"+u"hello"
printsif __name__ == '__main__':
main()
使用+操作符连接字符串的时候,左边为str类型,右边为unicode类型。python会见左边的中文字符串转换为Unicode后再与右边的Unicode连接,将str转换为Unicode的时候试用系统默认的ASCII编码对字符串进行解码,所以可能会产生UnicodeDecodeError异常。下面的解决方法:
s="python学习".decode("gbk")+u"hello"
或者
s="python学习"+u"hello".encode("utf-8")
字符串行为与python3一致
最后提一点,从python2.6以后可以通过下面的方式将定义的普通字符串识别为Unicode字符串,这样字符串的行为将与python3保持一致
from __future__ import unicode_literals
更多相关内容 -
Python使用中文正则表达式匹配指定中文字符串的方法示例
2020-12-25 14:28:43本文实例讲述了Python使用中文正则表达式匹配指定中文字符串的方法。分享给大家供大家参考,具体如下: 业务场景: 从中文字句中匹配出指定的中文子字符串 .这样的情况我在工作中遇到非常多, 特梳理总结如下. 难点: ... -
Python2与Python3关于字符串编码处理的差别总结
2020-09-16 08:10:42主要给大家介绍了Python2与Python3关于字符串编码处理差别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 -
python 中文字符串的处理实现代码
2021-01-20 04:58:53>>> teststr = ‘我的eclipse不能正确的解码gbk码!’ >>> teststr ‘\xe6\x88\x91\xe7\x9a\x84eclipse\xe4\xb8\x8d\xe8\x83\xbd\xe6\xad\xa3\xe7\xa1\xae\xe7\x9a\x84\xe8\xa7\xa3\xe7\xa0\x81gbk\xe7\xa0\x81\xef\... -
Python字符串处理实例详解
2020-09-21 07:59:18主要介绍了Python字符串处理实例详解的相关资料,需要的朋友可以参考下 -
Python中字符串的操作处理
2021-02-21 18:49:14前言 本文的文字及图片来源于网络,仅供...对字符串,Python提供了3个基本的操作符,如下表: 演示如下: >>> x = '一个' >>> y = '字符串' >>> x+y '一个字符串' >>&..前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取
1.字符串的操作符
对字符串,Python提供了3个基本的操作符,如下表:
演示如下:
>>> x = '一个' >>> y = '字符串' >>> x+y '一个字符串' >>> x*3 '一个一个一个' >>> s = '某个字符串' >>> x in s False >>> y in s True
2.字符串处理函数
使用函数方便快捷,Python内置有很多使用的字符串处理函数,常用的如下:
演示如下:
>>> s = '某列字符串' >>> len(s)#中英文、标点都算一个字符 5 >>> a =23 >>> str(a) '23' >>> chr(1010) 'ϲ' >>> ord('ϲ') 1010 >>> hex(123) '0x7b' >>> oct(123) '0o173'
3.字符串处理方法
方法是程序设计中的一个专有名词,属于面向对象程序设计领域。计算机二级等级考试不涉及Python中面向对象的内容,因此我们不用深究,会用就好。
方法也是一种函数,只是调用方式不同。函数采用<函数名>(参数)进行使用,方法则是<a>.<函数名>(参数)来进行调用,并以前导对象<a>为输入。
以下为常用的字符串处理方法:
演示如下:
>>> str='Python的字符串' >>> str.lower() 'python的字符串' >>> 'Python的字符串'.upper() 'PYTHON的字符串' >>> str.split('t') ['Py', 'hon的字符串'] >>> str.count('Python') 1 >>> str.replace('on','eg') 'Pytheg的字符串' >>> str.center(30,'+')#设定宽度为30,空白以‘+’填充 '++++++++++Python的字符串++++++++++' #字符串宽度比width大,因此显示字符串宽度,fillchar缺失默认空格 >>> str.center(2) 'Python的字符串' >>> '+'.join("Python")#很好理解,看效果就行 'P+y+t+h+o+n' >> str = ' ++==Python的普通字符==++ ' >>> str.strip(' ') '++==Python的普通字符==++'
-
【292】Python 关于中文字符串的操作
2020-12-23 13:45:04一、相关说明Python 中关于字符串的操作只限于英文字母,当进行中文字符的操作的时候就会报错,以下将相关操作方法进行展示。写在前面:如何获得系统的默认编码 ?>>> import sys>>> print sys....一、相关说明
Python 中关于字符串的操作只限于英文字母,当进行中文字符的操作的时候就会报错,以下将相关操作方法进行展示。
写在前面:如何获得系统的默认编码 ?
>>> import sys
>>> print sys.getdefaultencoding()
ascii
通过如下代码查询不同的字符串所使用的编码,具体操作详见:用chardet判断字符编码的方法
由此可见英文字符与中文字符用的是不一样的编码,因此需要将中文字符转为 Unicode 编码才能正常的计算了!
>>> import chardet
>>> print chardet.detect("abc")
{'confidence': 1.0, 'language': '', 'encoding': 'ascii'}
>>> print chardet.detect("我是中国人")
{'confidence': 0.9690625, 'language': '', 'encoding': 'utf-8'}
>>> print chardet.detect("abc-我是中国人")
{'confidence': 0.9690625, 'language': '', 'encoding': 'utf-8'}
通过 decode('utf-8') 将中文字符串解码,便可以正常操作,要相对中文字符进行相关操作,涉及到字符串函数的,需要按如下操作。
decode 的作用是将其他编码的字符串转换成 unicode 编码,如 str1.decode('utf-8'),表示将 utf-8 编码的字符串 str1 转换成 unicode 编码。
encode 的作用是将 unicode 编码转换成其他编码的字符串,如 str2.encode('utf-8'),表示将 unicode 编码的字符串 str2 转换成 utf-8 编码。
>>> m = "我是中国人"
>>> m
'\xe6\x88\x91\xe6\x98\xaf\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba'
>>> print m
我是中国人
>>> # 为解码前长度为15,utf-8编码
>>> len(m)
15
>>> n = m.decode('utf-8')
>>> n
u'\u6211\u662f\u4e2d\u56fd\u4eba'
>>> print n
我是中国人
>>> # 解码后长度为5,可以正常的操作,Unicode编码
>>> len(n)
5
将 utf-8 与 Unicode 编码转化函数如下:
def decodeChinese( string ):
"将中文 utf-8 编码转为 Unicode 编码"
tmp = string.decode('utf-8')
return tmp
def encodeChinese( string ):
"将 Unicode 编码转为 utf-8 编码"
tmp = string.encode('utf-8')
return tmp
二、截取中英文字符串
代码如下:
def cutChinese(string, *se):
"实现汉字截取方法 —— 默认start为开始索引,不写end就是到结尾,否则到end"
start = se[0]
if len(se)>1:
end = se[1]
else:
end = len(string)
tmp = string.decode('utf-8')[start:end].encode('utf-8')
return tmp
调用方法如下:
>>> from win_diy import *
>>> print win.cutChinese("我是一个abc", 2)
一个abc
>>> print win.cutChinese("我是一个abc", 2, 4)
一个
>>> print win.cutChinese("我是一个abc", 2, 5)
一个a
>>> print win.cutChinese("我是一个abc", 2, 6)
一个ab
三、判断变量编码格式
通过 isinstance 函数或 type 函数可以判断字符串类型
通过 chardet.detect 函数可以判断字符串的编码格式
>>> import chardet
>>> a = "abc"
>>> isinstance(a, str)
True
>>> chardet.detect(a)['encoding']
'ascii'
>>> isinstance(a, unicode)
False
>>> b = "中国"
>>> isinstance(b, str)
True
>>> chardet.detect(b)['encoding']
'utf-8'
>>> isinstance(b, unicode)
False
>>> # 用chardet.detect函数判断Unicode会报错
>>> c = b.decode('utf-8')
>>> isinstance(c, unicode)
True
-
python字符串处理去掉符号加空格
2017-08-11 10:16:31# 1、去掉特殊符号".",",">","#"; # 2、去掉中间多余空格; # 3、去掉首尾空格; # 4、中文与英文间添加空格 -
python语言字符串处理
2021-01-29 13:00:38python字符串处理函数1、修改字符串的大小写方法含义title()将每个单词首字母大写upper()将每个字母都大写lower()将每个字母都小写capitalize()将字符串首字母大写,其余字符小写实例:name="zhao li Xiang"print(...python字符串处理函数
1、修改字符串的大小写方法含义title()将每个单词首字母大写
upper()将每个字母都大写
lower()将每个字母都小写
capitalize()将字符串首字母大写,其余字符小写
实例:name="zhao li Xiang"
print("单词首字母大写前:%s"%name)
name.title()
print("单词首字母大写后(不用name接收):%s"%name)
name=name.title()
print("单词首字母大写后(用name接收):%s"%name)
print("*"*50)
name="zhao li Xiang"
print("所有字母都大写前:%s"%name)
name.upper()
print("所有字母都大写后(不用name接收):%s"%name)
name=name.upper()
print("所有字母大写后(用name接收):%s"%name)
print("*"*50)
name="zhao li Xiang"
print("所有字母都小写前:%s"%name)
name.lower()
print("所有字母都小写后(不用name接收):%s"%name)
name=name.lower()
print("所有字母都小写后(用name接收):%s"%name)
print("*"*50)
name="zhao li Xiang"
print("字符串首字母大写,其它字符小写前:%s"%name)
name.capitalize()
print("字符串首字母大写,其它字符小写后(不用name接收):%s"%name)
name=name.capitalize()
print("字符串首字母大写,其它字符小写后(用name接收):%s"%name)
上面三个方法中都只是返回改变后的结果,对操作的字符串对象没有任何影响
2、合并(拼接字符串)
使用+号来合并print("Mark"+"帅哥????")
3、使用制表符或换行符来添加空白
t:制表符 , n:换行符print("Mark\t帅哥")
print("Mark\n帅哥")
4、删除空白
lstrip():删除字符串开头空白、rstrip():删除字符串尾部空白、strip():删除字符串前后字空白注意:上面两个函数都只是返回删除空白后的字符串,对原有字符串没有改变
实例:name=" Mark "
name.lstrip()
print("*"+name+"*")
name.rstrip()
print("*"+name+"*")
print("*"+name.lstrip().rstrip()+"*")
print("*"+name.strip()+"*")
5、下标与切片
下标:字符串可以看出是一个字符数组,而在这个数组的位置就是对应字符的下标
切片:是对操作对象截取一部分的操作。字符串、列表、元组都支持切片切片的语法:[起始下标:结束下标:步长]
通过下标获取指定字符:name="abcdef"
print(name[0])
print(name[1])
print(name[2])
print(name[3])
切片操作:name="abcdef"
print(name[:3])
print(name[1:3])
print(name[3:])
print(name[1:5:2])
#从第二个字符到最后第二个字符
print(name[1:-1])
#倒序
print(name[::-1])
6、find、rfind:查找指定字符串是否存在于目标字符串语法:目标字符串.find(需要查询的指定字符串[开始查询的下标,结束查询的下标]):从左边开始查找
目标字符串.find(需要查询的指定字符串[开始查询的下标,结束查询的下标:从右边开始查找
存在就会返回下标,不存在就返回-1
实例:name="abcdefg"
print(name.find("cd"))
print(name.rfind("cd"))
print(name.find("gg"))
print(name.rfind("gg"))
7、index、rindex:查找指定字符串是否存在于目标字符串与find的不同点是如果没有查询到,index方法会报错
实例:name="abcdefg"
print(name.index("cd"))
print(name.rindex("cd"))
print(name.index("gg"))
print(name.rindex("gg"))
打印结果:2
Traceback (most recent call last):
2
File "/Users/zhaolixiang/Desktop/python/test1/venv/字符串index.py", line 4, in
print(name.index("gg"))
ValueError: substring not found
8、count:返回指定字符串在目标字符串出现的次数语法:目标字符串.count(指定字符串[,开始下标,结束下标])
实例:name="mark mark mark"
print(name.count("ar"))
print(name.count("ar",0,5))
print(name.count("ar",5))
打印结果:3
1
2
9、replace:替换字符串语法:mystr.replace(str1,str2[,count])
将mystr中的str1替换为str2,如果count指定,则替换次数不超过count次。
这个方法也是只影响返回值,不对mystr对象进行改变。
实例:name="mark mark mark"
print(name.replace("ar","br"))
print(name.replace("ar","br",0))
print(name.replace("ar","br",1))
打印结果:mark mark mark
mbrk mbrk mbrk
mark mark mark
mbrk mark mark
10、split分割字符串语法:mystr.split(str[,count])
把mystr依靠str进行分割,如果count指定,则最多分割count个字符串
实例:name="mark mark mark"
print(name.split("ar"))
print(name.split("ar",0))
print(name.split("ar",2))
打印结果:['m', 'k m', 'k m', 'k']
['mark mark mark']
['m', 'k m', 'k mark']
11、startswith、endswith判断是否以指定字符串开发或结束
实例:name="Mark 帅哥"
print(name.startswith("Mar"))
print(name.startswith("mar"))
print(name.endswith("哥"))
print(name.endswith("帅"))
控制台打印结果:True
False
True
False
12、ljust、rjust、center:返回一个元字符左对齐或右对齐或居中,用空白填充至指定宽度的字符串
实例:name="mark"
print("*"+name.ljust(2)+"*")
print("*"+name.ljust(6)+"*")
print("*"+name.rjust(6)+"*")
print("*"+name.center(6)+"*")
打印结果:*mark**mark*
* mark** mark*
13、partition、rpartition:将目标字符串安装指定字符串分割为三部分
实例:name="hello world world mark"
print(name.partition("world"))
print(name.rpartition("world"))
打印结果:('hello ', 'world', ' world mark')
('hello world ', 'world', ' mark')
14、splitlines按行分割字符串
实例:name="hello\nworld\nworld\nmark"
print(name.splitlines())
打印结果:['hello', 'world', 'world', 'mark']
15、isalpha:判断字符串是否都是字符
实例:print("mark".isalpha())
print("mark123".isalpha())
print("mark帅哥".isalpha())
print("mark 帅哥".isalpha())
打印结果:True
False
True
False
16、isdigit:判断字符串是否都是数字
实例:print("mark".isdigit())
print("123".isdigit())
print("123帅哥".isdigit())
打印结果:False
True
False
17、isalnum:判断字符串是否都是字符或数字
实例:print("mark".isalnum())
print("mark123".isalnum())
print("123".isalnum())
print("mark 帅哥".isalnum())
打印结果:True
True
True
False
18、isspace:判断字符串是否只包含空格
实例:print("mark".isspace())
print("mark 123".isspace())
print(" ".isspace())
打印结果:False
False
True
19、join:每个字符后面插入指定字符
实例:list=["my","name","is","mark"]
print(" ".join(list))
print("_".join(list))
打印 结果:my name is mark
my_name_is_mark
-
Python中字符串的处理技巧分享
2020-09-21 13:18:41给大家分享了Python中字符串的处理技巧,包括拆分含有多种分隔符的字符串、判断字符串a是否以字符串b开头或结尾、调整字符串中文本的格式已经将多个小字符串拼接成一个大的字符串等,感兴趣的朋友们可以通过阅读下文... -
Python去除、替换字符串空格的处理方法
2020-09-20 16:16:41主要介绍了Python去除、替换字符串空格的处理方法,去除字符串空格有两种方法,一种是 .replace(' old ',' new '),第二种方法也很简单,需要的朋友可以参考下 -
python 中文字符串处理-获得子串
2016-07-20 20:23:58由于python的处理是按照编码来处理的...所以会出现中国+乱码,选取字符串子串的操作是对unicode编码的字符串处理的. 计算机内存中使用的编码是unicode,作为中介转化Python的字符串搞清楚了令人头疼的字符编码问题后, -
处理python字符串中的中文字符
2020-12-08 23:17:28参考网址:http://blog.csdn.net/devil_2009/article/details/39526713 首先要明白的是,python里面默认的字符串都是ASCII编码,是string类型,ASCII编码处理中文字符是会出问题的。python的内部编码格式是unicode... -
Python Pandas处理字符串(方法详解)
2022-04-18 12:27:38常用的字符串处理函数如下表所示: 函数名称 函数功能和描述 lower() 将的字符串转换为小写。 upper() 将的字符串转换为大写。 len() 得出字符串的长度。 strip() 去除字符串两边的空格(包含换行符)... -
python字符串中的中文处理
2021-02-03 20:20:08LeetCode 374. Guess Number Higher or Lower We are playing the Guess ...简述 1.1 开发环境 该笔记所基于的开发环境为:windows8.python2.7.5.psycopg2-2.4.2.django1.5.4.pyCharm-2.7.3.以上所描述的软件.插件 ... -
Python实现针对含中文字符串的截取功能示例
2020-12-02 21:18:12本文实例讲述了Python实现针对含中文字符串的截取功能。分享给大家供大家参考,具体如下:对于含多字节的字符串,进行截断的时候,要判断截断处是几字节字符,不能将多字节从中分割,避免截断后乱码下面给出utf8和gb... -
Python原始字符串与Unicode字符串操作符用法实例分析
2021-01-21 17:48:05本文实例讲述了Python原始字符串与Unicode字符串操作符用法。分享给大家供大家参考,具体如下: #coding=utf8 ''''' 在原始字符串里,所有的字符串都是直接按照字面的意思来使用, 没有转义特殊或不能打印的字符。 ... -
python去掉 unicode 字符串前面的u方法
2020-09-20 01:03:21今天小编就为大家分享一篇python去掉 unicode 字符串前面的u方法。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
python获取中文字符串长度的方法
2021-01-20 05:10:42python中字符串的操作方法大全python 遍历字符串(含汉字)实例详解Python实现简单文本字符串处理的方法Python 打印中文字符的三种方法Python实现针对含中文字符串的截取功能示例Python 字符串操作方法大全Python中文... -
Python文本处理:字符串
2022-02-01 19:46:19在“字符串”Python中属于不可变有序序列。为方便编写,通常以单引号为定界符,当然,双引号或者三引号也可以作为定界符,并且其三者可互相嵌套。 字符串的不可变性使得系列操作不能直接对其进行元素添加、删除或者... -
Python-字符串编码
2022-01-11 12:20:16在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言 Python的字符串类型是str,在内存中以Unicode表示 在网络传输数据,或者保存到磁盘时,需要将数据转换为以字节为单位的bytes... -
Python合集之Python字符串编码转换
2021-03-17 02:43:51最早的字符串编码是美国标准信息交换码,即ASCII码,他仅对10个数字,26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASCII码最多只能表示256个符号,每个符号占一个字节。随着信息技术的发展,各国... -
Python读取文件内容为字符串的方法(多种方法详解)
2020-09-17 19:05:29主要介绍了Python读取文件内容为字符串的方法,本文通过三种方式给大家介绍,在文章末尾给大家提到了python读取txt文件中字符串,字符串用空格分隔的相关知识,需要的朋友可以参考下 -
python的字符串类型
2021-12-03 23:17:30一、python2的字符串类型 在python2中,字符串一般有两种类型,unicode和str。(python3中是Unicode类型) str为字节码,会根据某种编码把字符串转成一个个字节,这个时候一个字符根据不同的编码规则对应不同的字节... -
Python中字符串的超细解析
2021-07-12 17:45:41在python中字符串是基本数据类型, 是一个不可变的字符序列 1.代码如下: 示例: a='hello,hello' print(a.index('lo')) print(a.find('lo')) print(a.rindex('lo')) print(a.rfind('lo')) print('-----------... -
Python-一个快速强大的Python库用于检查字符串中的敏感词
2019-08-10 06:03:56一个快速,强大的Python库,用于检查字符串中的敏感词 -
python2中文字符处理,字符串处理
2020-10-12 11:45:13中文字符处理 str<---->unicode 从左到右是decode ,从右往左是encode <type 'str'> ---><type 'unicode'> decode('utf-8','gbk','gb2312') <type 'unicode'> ---><type 'str... -
python中准确获取中文字符串的长度
2020-12-20 03:40:02对于这个问题,我首先百度和Google了,但是结果并不理想,可以说都无法准确获取或很难获取,如果字符串中仅包含中文也还好,如果包含4字节的emoji表情字符怎么办?还有人说用正则表达式获取,但是Unicode标准仍在...