字符串
在Python中,字符串是除数字外最重要的数据类型。文件通常被视为大型字符串。
字符串是一种聚合数据结构,这让我们有机会会初探索引和切片——用于从字符串中提取子串的方法。
字符串索引
>>> s = 'apple'
>>> s[0]
'a'
>>> s[1]
'p'
>>> s[4]
'e'
如果索引超出了字符串末尾,将导致“超出范围”错误

负数索引
在访问字符串末尾附近的字符方面,Python提供了一种更便利的方式:负数索引
。其理念是,沿从右向左,用复数表示字符串中字符的索引:
>>> s = 'apple'
>>> s[-1]
'e'
>>> s[-2]
'l'
>>> s[-5]
'a'
因此字符串最后一个字符为s[-1]。

使用for循环访问字符
如果需要依次访问字符串的每个字符,for循环可助一臂之力。
下面的程序计算给定字符串的字符编码总和:
def codesum1(s):
total = 0
for c in s:
total = total + ord(c)
return total
>>> codesum1('Hi there!')
778
下面是常规字符串索引,请于codesum1进行比较:
def codesum2(s):
""" Returens the sums of the character codes of s. """
total = 0
for i in range(len(s)):
total = total + ord(s[i])
return total
这种实现的结果与codesum1相同,但更复杂、可读性更差。
字符
字符串由字符组成,而字符本身实际上是一个非常复杂的问题。所有字符都有对应的字符编码,你可以使用函数ord来熟悉:
>>> ord('a')
97
>>> ord('b')
98
>>> ord('c')
99
字符编码是根据Unicode分配的,而Unicode是一个庞大的编码标准,涵盖了全球各种语言中的符号和字符。
转义字符
为处理空白字符以及其他不可打印的字符,Python使用一种特殊表示法——转义序列(也叫转义字符)。

在Python中,表示换行的标准方式是使用字符\n:
>>> print('one\ntow\nthree')
one
tow
three
转义字符是单个字符,为了让Python知道下一个字符是特殊字符,必须使用\,但是计算字符串长度时,并不将\视为额外字符。
字符串切片
>>> food = 'apple pie'
>>> food[0, 5]
'apple'
>>> food[6, 9]
'pie'
获取切片的捷径
如果你省略切片的起始索引,Python将假设它为零;
如果你省略切片的终止索引,Python将假设你要提取到字符串的末尾。
>>> food = 'apple pie'
>>> food[:5]
'apple'
>>> food[6:]
'pie'
>>> food[:]
'apple pie'
下面是一个切片示例,这个函数返回文件名中的扩展名:
def get_ext(fname):
""" Returns the extension of file
fname.
"""
dot = fname.rfind('.')
if dot == -1: \# fname 中没有
return ''
else:
return fname[dot + 1:]
>>> get_ext('hello.text')
'text'
>>> get_ext('pizza.old.py')
'py'
rfind 从右往左查找
测试函数

搜索函数
如图所示,在字符串中查找子串的方式有多重。函数index和find之间的差别在于没有找到指定子串时的情形。

改变大小写的函数
Python 提供了各种修改字母大小写的函数,但别忘了,Python绝不会修改字符串:在所有这些函数中,Python都创建并返回一个新字符串。

设置格式的函数
下图列出了字符串格式的函数,它们让你能够美化字符串。

字符串format功能非常强大,包含用于设置字符串格式的微型语言。要使用函数format,你需要给他提供变量或值:
>>> '{0} likes {1}'.format('Jack', 'ice cream')
'Jack likes ice cream'
你还可以使用关键字参数的名称:
>>> '{who} {pet} has fleas'.format (pet = 'dog', who = 'my')
'my dog has fleas'
format还可以用于指定字符串间距、将数字转换为字符串等。官方文档: http://docs.python.org/3/library/string.html#format-string-syntax,需要科学上网。
剥除函数
剥除函数用于删除字符串开头或末尾多余的字符,默认情况下,将剥除空白字符;如果制定了一个字符串参数,将剥除该字符串中的字符。

拆分函数
拆分函数将字符串拆分成多个子串,如下图所示。函数partition
和rpartition
将字符串拆分为3部分:

>>> url = 'www.google.com'
>>> url.partition('.')
('www', '.', 'google.com')
>>> url.rpartition('.')
('www.google', '.', 'com')
函数split以指定字符串为分隔符,将字符串划分为一系列子串。
>>> url = 'www.google.com'
>>> url.split('.')
['www', 'google', 'com']
>>> story = 'A long time ago, a princess ate apple.'
>>> story.split()
['A', 'long', 'time', 'age,', 'a', 'princess', 'ate', 'an', 'apple.']
函数split总是返回一个字符串列表。
替换函数

其他函数

正则表达式

在正则表达式中,可使用圆括号来指出要将运算符用于那个子串。
使用正则表达式匹配字符串
在简单的情况下,正则表达式并不比通常的写法短很多,也不一定更好。然而,随着程序越来越大、越来越复杂,正则表达式的优势就会逐渐显现出来。
假设要识别开头为一个或者多个'ha',末尾为一个或者多个'!',如'haha!'、'ha!!!!'等,使用正则表达式匹配这些字符串很容易:
import re
def is_funny(s):
return re.match('(ha)+!+', s) != None
网友评论