Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ

  在Python中,字符串也是一种数据类型。相比其它数据类型,字符串算是比较复杂的。为何呢?因为字符串不仅包含英文字母,还包括各国的语言文字。既然字符串包含各国语言,因此字符串还涉及编码问题。

  在Python 3.x版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言。

  示例代码如下:

 #字符串包含中文
>>>print('我爱祖国!I love my country!')
我爱祖国!I love my country!

  字符串支持拼接语法。

#拼接字符串
>>>x = "Hello,"
>>>y = 'world!'
>>>x + y
'Hello,world!'
>>>print(x + y)
Hello,world!

  在Python中,值被转换为字符串的两种机制:

  一、str(),它会把值转换为合理形式的字符串,方便用户理解;

  二、repr(),它会创建一个字符串,以合法的Python表达式的形式来表示值。

  对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:

 #ord()和chr()
>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'

  如果知道字符的整数编码,还可以用十六进制这么写str:

 #十六进制——字符串编码
>>> '\u4e2d\u6587'
'中文'

  两种写法完全是等价的。

  由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。

  如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。

  Python对bytes类型的数据用带b前缀的单引号或双引号表示:

 #Bytes编码
>>>s = b'ACV'
>>>print(s)
b'ACV'
>>>s
b'ACV'

  要注意区分'ABC'b'ABC',前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。

  以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如:

 #字符串编码之ASCII、UTF-8
>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

  需要注意的是,我们可以将str转换成任意编码的bytes。但是在转换含有中文的str时,不能转换成ascii编码的bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。

  反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:

#decode()用法
1 >>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'

  要计算str包含多少个字符,可以用len()函数:

 >>> len('ABC')
3
>>> len('中文')
2

  len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数:

 >>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6

  在操作字符串时,我们经常遇到str和bytes的互相转换。

  特别地,为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换。

字符串格式化

  最后一个常见的问题是如何输出格式化的字符串。我们经常会输出类似'亲爱的xxx你好!你xx月的话费是xx,余额是xx'之类的字符串,而xxx的内容都是根据变量变化的,所以,需要一种简便的格式化字符串的方式。

  c语言中可以采用%来控制输出的格式,python中也类似。

  示例代码如下:

 #字符串格式化(%)
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('James', 1000000)
'Hi, Michael, you have $1000000.'

  %运算符就是用来格式化字符串的。

  在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。

常见的占位符
占位符 替换内容
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数

  如果你不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串:

 >>> 'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'

  有读者会有疑问,那遇到字符串本身含有%,怎么办呢?

  这个简单,这要转义就OK拉。用%%来表示一个%。

 #%转义
>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'

  字符串格式化的另外一种方法:使用.format()。

  它会用传入的参数依次替换字符串内的占位符{0}{1}……,不过这种方式写起来比%要麻烦得多。

  .format()语法如下:

 #.format语法
>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
'Hello, 小明, 成绩提升了 17.1%'

  字符串中既包含小写字母又包含大写字母,如何将大写字母转化为小写字母呢?

  在Python中,字符串中有lower()方法。

#字符串lower()方法
>>>x = "HelLO wOrLd!"
>>>x.lower()
'hello world!'

  字符串还提供了很多方法,比如find()、join()、replace()、split()、strip()、upper()、title()、lstrip()、rstrip()等等。其实,方法是为人类服务的,利用方法可以可以最大化地体现String功能的强大之处。

  find():在字符串中查找子串,并返回子串所在位置的最左端索引。

  join():连接序列中的元素。

  replace():返回某字符串中所有匹配项均被替换后的新字符串。

  split():将字符串分隔成序列。

  strip():返回去除两侧(不包括内部)空格的字符串。

  ……

  ……

字符串方法
方法 描述
string.capitalize() 返回首字母大写的字符串的副本
string.center() 返回一个长度为max(len(string),width)且其中String的副本居中的字符串,两侧使用fillchar(默认为空字符串)填充
string.count(sub[,start[,end]]) 计算子字符串sub的出现次数,可将搜索范围限制为string[start,end]
string.find(sub[,start[,end]]) 返回子字符串sub的第一个索引,如果不存在则返回-1,可以定义字符串的搜索范围为string[start:end]
string.isalnum() 检查字符串是否由数字和字母字符组成
string.isalpha() 检查字符串是否由字母字符组成
string.isdigit() 检查字符串是否由数字组成
string.islower() 检查字符串中所有基于实例的字母是否都为小写
string.isspace() 检查字符串是否由空格组成
string.istitle() 检查字符串中不基于实例的字母后面的基于实例的字符都是大写的,且其他的基于实例的字符都是小写的
string.isupper() 检查是否所有的字符串中的基于实例的字符都是大写
string.join(sequence) 返回其中sequence的字符串元素已用String连接的字符串
string.lower() 返回一个字符串的副本,其中所有基于实例的字符都是小写
string.replace(old,new[,max]) 返回字符串的副本,其中old的匹配项都被new替代,可选择最多替换max个
string.split([sep[,maxsplit]]) 返回字符串中所有单词的列表,使用sep作为分隔符(若没有指定特别的分隔符,默认为空格),可使用maxsplit指定最大切分数
string.strip([chars]) 返回字符串的副本,其中所有chars(默认空格)都从字符串的开头和结尾去除(默认为所有空白字符,如空格,tab和换行符)
string.title() 返回字符串的副本,其中单词都以大写字母开头
string.upper() 返回字符串的副本,其中所有基于实例的字符都为大写

  字符串方法还有很多很多,这里就不详细例举啦~~~

Python基础——字符串的更多相关文章

  1. python基础——字符串和编码

    python基础——字符串和编码 字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用 ...

  2. Python 基础-> 字符串,数字,变量

    Python 基础:字符串,数字,变量 1. 字符串 (信息的一种表达方式) a. 使用引号创建字符串 b. 单引号,双引号,三引号: ', ", ''', ""&quo ...

  3. Python基础-字符串格式化_百分号方式_format方式

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  4. Python 基础 字符串拼接 + if while for循环

    注释单行注释 #多行注释 ''' 三个单引号或者三个双引号 """ ''' 用三引号引住可以多行赋值 用户交互 input 字符串拼接 +  ""%( ...

  5. python基础-字符串(6)

    一.引言 当打来浏览器登录某些网站的时候,需要输入密码,浏览器把密码传送到服务器后,服务器会对密码进行验证,其验证过程是把之前保存的密码与本次传递过去的密码进行对比,如果相等,那么就认为密码正确,否则 ...

  6. python基础——字符串、编码、格式化

    1.三种编码:ascii Unicode utf8 2.字符串和编码数字的两个函数:ord(字符转数字ord(‘A’)=65)和 chr(数字转字符chr(65)=A) 3.bytes存储编码,记住两 ...

  7. [Python] Python基础字符串

    Python的语法采用缩进的方式,一般使用四个空格,并且是大小写敏感的 字符编码 计算机只能处理数字,如果要处理文本,必须先把文本转换成数字才能处理 采用8个比特(bit)作为一个字节(byte) 一 ...

  8. Python基础(字符串和编码)

    字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特 ...

  9. 六 Python基础 字符串和编码

    字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特 ...

随机推荐

  1. 捕获arm非托管磁盘虚拟机,并进行还原

    背景:非托管磁盘虚拟机"hlmcen69n1",附加了一块100GB的数据磁盘.由于arm非托管磁盘机器无法通过Portal界面直接"Capture",故只能通 ...

  2. Django_xadmin后台全局设置

    如何使用xadmin主题功能? 在ursersa app下的adminx.py文件下,注册一个基础设置类BaseSetting,并注册 import xadminfrom xadmin import ...

  3. scrapy_移除内容中html标签

    如何移除所获取内容中多余的html标签? 通过w3lib模块和re模块 #!/usr/bin/python3 # -*- coding: UTF-8 -*- __author__ = 'beimenc ...

  4. Ubuntu 11.10 Server下搭建Maven私服

      安装Nexus服务的文档可以参考官方站点:http://www.sonatype.com/books/nexus-book/reference/install-sect-install.html ...

  5. org.apache.catalina.util.DefaultAnnotationProcessor cannot be cast to org.apache.AnnotationProcessor

    这几天来公司,公司的SVN坏掉了,然后项目还比较大,是一个分布式的,然后同事就把项目发我了.我在myeclipse里面导入项目了,把相应的jar包也建了个人的library导入了项目,现在项目不报错了 ...

  6. String.Format 格式化货币的小问题

    今天在开发过程中,遇到一件让我觉得比较纳闷的事情:用String.Format 格式化充值金额的时候,我这样处理: String.Format("{0:C2}", dr[" ...

  7. Nginx的安装(笔记)

    0, 先决条件Nginx 依赖 zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre安装命令:yum -y install make z ...

  8. 重拾Python(1):使用Anaconda搭建Python开发环境(Windows7)

    1.为什么选择Anaconda? Anaconda解决了Python使用痛点. Python好用但是令人头疼的就是库管理与Python不同版本的问题,特别是Windows环境下. 2.什么是Anaco ...

  9. zabbix监控-percona监控MySQL(三)

    监控MySQL实战 标签(linux): zabbix & mysql 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 percona为MySQL制作了专 ...

  10. NIO笔记---上

    小弟前端时间由于开发个管理系统导致断更了近20天!!马上就要春招了,学习了一下NIO,将笔记记录下,希望和我一样的18届毕业生都能找到满意的公司!! 本文记录了NIO与IO的区别,缓冲区的数据存取,直 ...