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之重回函数
Oct 10 Python
浅析Python中signal包的使用
Nov 13 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
Mar 19 Python
利用python的socket发送http(s)请求方法示例
May 07 Python
python flask框架实现传数据到js的方法分析
Jun 11 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
python logging添加filter教程
Dec 24 Python
python统计函数库scipy.stats的用法解析
Feb 25 Python
python获取栅格点和面值的实现
Mar 10 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
Apr 19 Python
Python基于Tkinter编写crc校验工具
May 06 Python
Django migrate报错的解决方案
May 20 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新改动之短标记启用方法
2008/09/11 PHP
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
php删除文本文件中重复行的方法
2015/04/28 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
js评分组件使用详解
2017/06/06 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
AngularJS自定义过滤器用法经典实例总结
2018/05/17 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
Python解决八皇后问题示例
2018/04/22 Python
python实现textrank关键词提取
2018/06/22 Python
通过pycharm使用git的步骤(图文详解)
2019/06/13 Python
pandas中的series数据类型详解
2019/07/06 Python
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
实习单位接收函模板
2014/01/10 职场文书
50岁生日感言
2014/01/23 职场文书
2014年小学植树节活动方案
2014/03/02 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
教师自荐信范文
2015/03/06 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
英语演讲开场白
2015/05/29 职场文书
安全学习心得体会范文
2016/01/18 职场文书
Windows中Redis安装配置流程并实现远程访问功能
2021/06/07 Redis
Oracle使用别名的好处
2022/04/19 Oracle