与C语言不同,Python没有单个字符的这种类型,取而代之的是可以使用一个字符的字符串。
严格地说,Python的字符串被划分为不可变序列这一类别,意味着这些字符串所包含的字符存在从左至右的位置顺序,并且不可以在原处修改。
字符串常量
单双引号字符串是一样的
用转义序列代表特殊字节
最后一条\other,不转义,保留
如果希望在脚本中编写明确的常量反斜杠,重复两个反斜杠("\\"是"\"的转义字符)或者使用raw字符串
raw字符串抑制转义
例如我们需要打开C:\new目录下名为text.dat的文件,这里有"\n","\t",会被转义字符所替代,这不是我们预期的结果
通过raw字符串抑制和"\\"转义可以解决这个问题
三重引号编写多行字符串
另外三重引号字符串经常在开发过程中作为一种恐怖的黑客风格的方法去废除一些代码,即希望让一些行的代码不工作,可以简单地在这几行前、后加入三重引号,如下:
实际应用中的字符串
基本操作
通过+进行合并,通过*进行重复
索引和分片
因为字符串定义为字符的有序集合,所以我们能够通过其位置获得他们的元素。在Python中字符是通过索引提取的。
与C不同,Python还支持类似在字符串中使用负偏移这样的方法从序列中获取元素(负偏移看做是从结束处反向计数)。
扩展分片:第三个限制值
扩展形式:X[I:J:K],这表示“索引X对象中的元素,从偏移为I直到偏移为J-1,每隔K元素索引一次(K默认为1)”
字符串转换工具
字符串代码转换
ord函数:将单个字符转换为其对应的ASCII码,实际上返回的是这个字符在内存中对应的字符的二进制值
chr函数:执行相反的操作,获取ASCII码并将其转化为对应的字符
上述I的左移运算与这里的乘2运算是一样的,如下:
修改字符串
“不可变序列”:不能在原地修改一个字符串,如下:
若要修改一个字符串,需要利用合并、分片这样的工具来建立并赋值给一个新的字符串,倘若必要的话,还要将这个结果赋值给字符串最初的命名:
字符串方法
字符串方法实例:修改字符串
由于字符串是不可变的,所以不能在原处直接对其进行修改,为了在已存在的字符串中创建新的文本值,可以通过分片和合并这样的操作建立新的字符串
find方法返回在子字符串出现处的偏移(默认从前向后开始搜索)或者未找到时返回-1:
合并操作和replace方法每次运行会产生新的字符串对象,实际上利用它们去修改字符串是一个潜在的缺陷,如果你不得不对一个超长字符串进行许多的修改,为了优化脚本的性能,可能需要将一个字符串转换为一个支持原处修改的对象。
解决方法:使用内置list函数以任意序列中的元素创立一个新的列表进行修改,并利用字符串的方法join将列表“合成”一个字符串
字符串方法实例:文本解析
分析结构并提取子串:使用分片和split方法
字符串的split方法将一个字符串分割为一个子字符串的列表,以分隔符字符串为标准,默认的分隔符为空格一一这个字符被一个或多个空格、制表符或者换行符分成多个组,之后我们得到了一个最终子字符串的列表。
实际应用中的其他常见字符串方法
其他字符串方法都有更专注的角色,例如,为了清除每行末尾的空白,执行大小写转换,测试内容以及检测末尾或起始的子字符串
最初的字符串模块(在Python3.0中删除)
由于最初的python只提供一个标准库模块,名为string,其中包含的函数大约相当于目前的字符串对象方法集。在Python3.0后,最初的模块调用形式已经删除,如下我们可以看到两种方式启用字符串操作:调用对象方法或者调用string模块函数
正如描述,第二种方法导入string模块,在python3.0中已删除,不过你可以在python2.0中运行
字符串格式化表达式
Python中的字符串格式化可以以两种形式实现:
字符串格式化表达式
这是从Python诞生的时候就有的最初的技术;这是基于C语言的"printf"模型,并且在大多数现有的代码中使用
字符串格式化方法调用
这是Python2.6和Python3.0新增加的技术,这是Python独有的方法,并且和字符串格式化表达式的功能有很大重叠。
更高级的字符串格式化表达式
基于字典的字符串格式化
字符串的格式化同时也允许左边的转换目标来引用右边字典中的键来提取对应的值
字符串格式化调用方法
基础知识
Python2.6和Python3.0中的新的字符串对象的format方法使用主体字符串作为模板,并且接受任意多个表示将要根据模板替换的值的参数,在主体字符串中,花括号通过位置(例如,{1})或关键字(例如,{food})指出替换目标及将要插入的参数。
本质上字符串也可以是创建一个临时字符串的常量,并且任意的对象类型都可以替换:
另外,字符串格式化不只是用来显示,由于字符串是不变的,因此,就像%和其他字符串方法一样,format创建并返回一个新的字符串对象,可以立即打印或保存起来方便以后使用
添加键、属性和偏移量
格式化字符串可以指定对象属性和字典键一一就像在常规的Python语法中一样,方括号指定字典键,而点表示位置或关键字所引用的一项的对象属性
添加具体格式化
例如,下面的{0:10}意味着一个10字符宽的字段中的第一个位置参数,{1:<10}意味着第2个位置参数在一个10字符宽度字段中左对齐,{0.platform:>10}意味着第一个参数的platform属性在10字符宽度的字段中右对齐
与%格式化表达式比较