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连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
python使用Tkinter显示网络图片的方法
Apr 24 Python
Python数组定义方法
Apr 13 Python
Django中Forms的使用代码解析
Feb 10 Python
pandas 对每一列数据进行标准化的方法
Jun 09 Python
python中的turtle库函数简单使用教程
Jul 23 Python
python实现本地图片转存并重命名的示例代码
Oct 27 Python
使用Python正则表达式操作文本数据的方法
May 14 Python
python处理“
Jun 10 Python
django 框架实现的用户注册、登录、退出功能示例
Nov 28 Python
基于Python模拟浏览器发送http请求
Nov 06 Python
Python实现生成bmp图像的方法
Jun 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
提升PHP执行速度全攻略(下)
2006/10/09 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
2014/11/04 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
js Flash插入函数免激活代码
2009/03/31 Javascript
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
2018/12/14 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
2019/04/22 Javascript
详解React 元素渲染
2020/07/07 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
深入分析在Python模块顶层运行的代码引起的一个Bug
2014/07/04 Python
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
利用Python破解斗地主残局详解
2017/06/30 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
NumPy统计函数的实现方法
2020/01/21 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
事业单位个人应聘自荐信
2013/09/21 职场文书
合同和协议有什么区别?
2014/10/08 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
个人创业事迹材料
2014/12/30 职场文书
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android