Python3字符串学习教程


Posted in Python onAugust 20, 2015

字符串类型是python里面最常见的类型,是不可变类型,支持单引号、双引号、三引号,三引号是一对连续的单引号或者双引号,允许一个字符串跨多行。
字符串连接:前面提到的+操作符可用于字符串连接,还可以直接把几个字符串连在一起写,另外调用join()方法也可以连接字符串。
只适用于字符串连接的操作符:前面提到了一些序列类型共用的操作符,除此之外,字符串还有只属于自己的操作符,包括格式控制操作符%、字符串模板string.Template、原始字符串操作符r/R、Unicode字符串操作符u/U。

下面列举一些与字符串类型有关的模块。
string:字符串操作相关函数和工具,比如Template类。
re:正则表达式,强大的字符串模式匹配模块。
struct:字符串和二进制之间的切换。
c/StringIO:字符串缓冲对象,操作方法类似于file对象。
base64:Base16,32,64数据编解码。
codecs:解码器注册和基类。
crypt:进行单方面加密。
difflib:找出序列间的不同。
hashlib:多种不同安全哈系算法和信息摘要算法的API,python2.5废除。
hma:HMAC信息鉴权算法的python实现。
md5:RSA的MD5信息摘要鉴权。
rotor:提供多平台的加解密服务。
sha:NIAT的安全哈系算法SHA。
stringprep:提供用于IP协议的Unicode字符串。
textwrap:文本打包和填充。
unicodedata:Unicode数据库。

Python 3 的源码的默认编码方式为 UTF-8
在Python 3,所有的字符串都是使用Unicode编码的字符序列。
utf-8 是一种将字符编码成字节序列的方式。字节即字节,并非字符。字符在计算机内只是一种抽象。字符串则是一种抽象的序列。在这里我们只讨论字符串,不讨论字节。

在Python 中,字符串可以用单引号括起来,也可以用双引号,甚至是三引号。
但如果字符串中含有单引号,你应该用双引号来括,或者用转义符加单引号括起来。含有双引号的同理。
三引号的字符串可以换行!

>>> 'Let's go!' 
SyntaxError: invalid syntax 
>>> "Let's go!" 
"Let's go!" 
>>> 'Let\'s go!' 
"Let's go!" 
>>> '''''begin 
and 
next 
end''' 
'begin\nand\nnext\nend'

字符串是不可修改的,这点很重要!你可以把它想象为字符组成的元组。

>>> s = "HelloWorld" 
>>> s[0] = 'h' 
Traceback (most recent call last): 
 File "<pyshell#123>", line 1, in <module> 
  s[0] = 'h' 
TypeError: 'str' object does not support item assignment

如果你想修改它,可以先转换成列表,修改完成后再转为字符串。

>>> s 
'HelloWorld' 
>>> L = list(s) 
>>> L 
['H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd'] 
>>> L[0] = 'h' 
>>> ''.join(L) #这是什么?别着急,下面我们会谈到 
'helloWorld'

字符串可以进行直接拼接,但如果是两个变量代表的字符串,你还是用 + 号吧

>>> s = "Hello""World" 
>>> s 
'HelloWorld' 
>>> s1 = "Hello" 
>>> s2 = "World" 
>>> s1s2 
Traceback (most recent call last): 
 File "<pyshell#138>", line 1, in <module> 
  s1s2 
NameError: name 's1s2' is not defined 
>>> s1+s2 
'HelloWorld'

字符串操作和方法:
len(s)  返回字符串长度
x in s 查询 x 是否在 s 中

>>> s = "HelloWorld" 
>>> len(s) 
10 
>>> "ll" in s 
True

s.find( x )  在字符串 s 中找子串 x ,找到则返回最左端的索引,找不到则返回-1

>>> s 
'HelloWorld' 
>>> s.find("l") 
2 
>>> s.find('w') 
-1

s.splitlines() 将多行字符串分割成多个单行字符串组成的列表,换行符被吸收

>>> s = '''''begin 
...then.. 
...next.. 
end...''' 
>>> s.splitlines() 
['begin', '...then..', '...next..', 'end...']

s.split( x ) 以 x 作为分隔符将 s 分割成一个字符串列表,如果不提供x,则程序会自动将所有空格和换行作为分隔符分割

>>> s = "here#there" 
>>> s.split('#') # #作为分隔符 
['here', 'there'] 
>>> s = '''''begin 
.then.. and 
.next. 
end''' 
>>> s.split() #默认情况将所有换行和空格都分割 
['begin', '.then..', 'and', '.next.', 'end']

s.lower()   返回s 的小写形式的字符串
s.upper() 返回 s 的大写形式的字符串

>>> s = 'HelloWorld' 
>>> s.lower() 
'helloworld' 
>>> s.upper() 
'HELLOWORLD'

s.join( seq )  split 的逆方法,将序列 seq 用 s 连接起来,必须是字符串序列

>>> L = ['1','33','42'] 
>>> '+'.join(L) #用+来连接 
'1+33+42' 
>>> L = list(s) #拆开s 
>>> L 
['H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd'] 
>>> ''.join(L) #粘合了。。。 
'HelloWorld'

s.replace( x, y)  将 s 中所有匹配 x 的项用 y 代替,如果找不到,那就直接返回 s 咯

>>> s 
'HelloWorld' 
>>> s.replace("World","Cheng") 
'HelloCheng' 
>>> s.replace("world","Cheng") #知道为什么吧... 
'HelloWorld'

s.strip( x ) 如果不提供 x,那么返回去除了首尾两侧空格的字符串,如果提供了字符串 x,那么将去除s首尾所有在 x 中的字符并返回

>>> s = "  Hi,I'm Alice!  " 
>>> s.strip() 
"Hi,I'm Alice!" 
>>> s.strip("! ") #这是两个字符哦 
"Hi,I'm Alice" #少了一个感叹号哦!

再次注意:以上方法都没有改变原字符串,字符串是不可改变的!

以下简单看看:
s.starstwith( x )  测试 s 是否以 x 开头
s.endswith( x )  测试 s 是否以 x 结尾
s.isalnum()  测试 s 是否全是字母和数字,并至少有一个字符
s.isalpha()   测试 s 是否全是字母,并至少有一个字符
s.isdigit()  测试 s 是否全是数字,并至少有一个字符
s.isspace()  测试 s 是否全是空白字符,并至少有一个字符
s.islower() 测试 s 中的字母是否全是小写
s.isupper() 测试 s 中的字母是否便是大写
s.istitle() 测试 s 是否是首字母大写的

让我们重点关注一个强大的格式化方法 format ,看下面代码

>>> name = 'Jonh' 
>>> call = '13560300xxx' 
>>> "{0}'s telephone number is {1}".format(name,call) # (1) 
"Jonh's telephone number is 13560300xxx" 
>>> addr = "A103" 
>>> "{0}'s telephone number is {1} and his address is {2}".format(name,call,addr) #(2) 
"Jonh's telephone number is 13560300xxx and his address is A103"

(1)句中,字符串中 {0} 被 format 的第一个参数代替,{1} 被第二个参数代替。两个参数不够?事实上,你可以给予它任意多个参数,然后用相同个数的替换字段进行替换。什么是替换字段?{0},{1}就叫做替换字段。我们在第(2)句中使用了3个替换字段,{0}对应name, {1}对应call,{2}对应addr。再多的参数也类似于刚才的做法。
那么,仅仅是这样?当然不是!让我们继续看

>>> L = [2,3,5,7] 
>>> print("x is {0[0]}, y is {0[2]}".format(L)) 
x is 2, y is 5

{0[0]} 表示L[0],{0[2]} 表示L[2],它们叫做复合字段名,你可以:
(1)使用列表作为参数,并且通过下标索引来访问其元素(跟上一例类似)
(2)使用字典作为参数,并且通过键来访问其值

>>> d 
{'b': 2, 'a': 1} 
>>> print("x is {0[a]}, y is {0[b]}".format(d)) 
x is 1, y is 2 
>>> d = {2:3.5,7:4.5} 
>>> print("x is {0[2]}, y is {0[7]}".format(d)) 
x is 3.5, y is 4.5

d 为字典,a 、b为键,{0[a]} 对应到了值2(注意:是a,b,不是'a', 'b')
(3)使用模块作为参数,并且通过名字来访问其变量及函数

>>> print("{0.random}".format(random)) 
<built-in method random of Random object at 0x022D61F8>

(4)使用类的实例作为参数,并且通过名字来访问其方法和属性

>>> class A: 
  pass 
 
>>> x = A() 
>>> print("The class is {0.__class__}".format(x)) 
The class is <class '__main__.A'>

(5)以上方法的任意组合

替换字段除了整数,你还可以使用参数名字

>>> print("{name}'s telephone number is {call}".format(name = "Jonh",call = 69993)) 
Jonh's telephone number is 69993

在替换域中,你还可以使用格式说明符。冒号 : 标示格式说明符的开始。

>>> pi = 3.141592653 
>>> print("The pi is {0:10.3f}".format(pi)) # 0:10.3f 表示输出宽度为10,保留三位小数,浮点数 
The pi is   3.142
Python 相关文章推荐
简介Python中用于处理字符串的center()方法
May 18 Python
Python实现备份MySQL数据库的方法示例
Jan 11 Python
用Django实现一个可运行的区块链应用
Mar 08 Python
python开启debug模式的方法
Jun 27 Python
python中pytest收集用例规则与运行指定用例详解
Jun 27 Python
python实现的汉诺塔算法示例
Oct 23 Python
使用Pytorch来拟合函数方式
Jan 14 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
Feb 07 Python
解决ROC曲线画出来只有一个点的问题
Feb 28 Python
Python socket连接中的粘包、精确传输问题实例分析
Mar 24 Python
python ssh 执行shell命令的示例
Sep 29 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 04 Python
Python中列表和元组的相关语句和方法讲解
Aug 20 #Python
编写Python脚本抓取网络小说来制作自己的阅读器
Aug 20 #Python
使用Python求解最大公约数的实现方法
Aug 20 #Python
使用Python3编写抓取网页和只抓网页图片的脚本
Aug 20 #Python
详解Python3中yield生成器的用法
Aug 20 #Python
Python中集合的内建函数和内建方法学习教程
Aug 19 #Python
深入解析Python中的集合类型操作符
Aug 19 #Python
You might like
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
php代码检查代理ip的有效性
2016/08/19 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
js选择并转移导航菜单示例代码
2014/08/19 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
前端 javascript 实现文件下载的示例
2020/11/24 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
python实现Decorator模式实例代码
2018/02/09 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
python处理multipart/form-data的请求方法
2018/12/26 Python
python中多个装饰器的调用顺序详解
2019/07/16 Python
Python面向对象之Web静态服务器
2019/09/03 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
土木工程应届生求职信
2013/10/31 职场文书
颁奖晚会主持词
2014/03/25 职场文书
北京奥运会口号
2014/06/21 职场文书
改革共识倡议书
2014/08/29 职场文书
工厂见习报告范文
2014/10/31 职场文书
2014年化妆品销售工作总结
2014/12/01 职场文书
起诉状范本
2015/05/20 职场文书
学子宴致辞大全
2015/07/27 职场文书