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 字符串格式化输出(format/printf)
Jul 21 Python
Python yield与实现方法代码分析
Feb 06 Python
python按比例随机切分数据的实现
Jul 11 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
PyTorch 普通卷积和空洞卷积实例
Jan 07 Python
Python实现屏幕录制功能的代码
Mar 02 Python
python实现梯度法 python最速下降法
Mar 24 Python
使用python matplotlib 画图导入到word中如何保证分辨率
Apr 16 Python
Keras 加载已经训练好的模型进行预测操作
Jun 17 Python
TensorFlow保存TensorBoard图像操作
Jun 23 Python
Python中的None与 NULL(即空字符)的区别详解
Sep 24 Python
pandas将list数据拆分成行或列的实现
Dec 13 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
人大复印资料处理程序_补充篇
2006/10/09 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
2013/05/10 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
JavaScript日期选择功能示例
2017/01/16 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
微信小程序获取用户openid的实现
2018/12/24 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
Python打印斐波拉契数列实例
2015/07/07 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
2018/08/03 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
python实现视频压缩功能
2020/12/18 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
html5 Canvas实现图片旋转的示例
2018/01/15 HTML / CSS
国外的一些J2EE面试题一
2012/10/13 面试题
商业活动邀请函
2014/02/04 职场文书
国庆节演讲稿
2014/05/27 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
PostgreSQL常用字符串分割函数整理汇总
2022/07/07 PostgreSQL