字符串:
一个个字符组成的有序的序列,是字符的集合;
使用单引号、双引号、三引号引住的字符序列;
字符串是不可变对象;
python3起,字符串就是Unicode类型
字符串定义 初始化
举例:
s1 = 'string' s2 = "string2" s3 = '''this's a "string" ''' s4 = 'hello \n magedu.com' s5 = r"hello \n magedu.com" s6 = 'c:\windows\nt' s7 = R"c:\windows\nt" s8 = 'c:\windows\\nt' sql = """select * from user where name='tom';"""
字符串元素访问——下标
字符串支持使用索引访问:
sql = """select * from user where name='tom';""" sql[4] # 字符串'c' sql[4] = 'o' #这样做行吗??? TypeError: 'str' object does not support item assignment 切记:字符串是不可变对象;
有序的字符集合,字符序列:
for c in sql: print(c) print(type(c))
可迭代
lst = list(sql) print(lst)
字符串join连接*
S.join(iterable) -> str
将可迭代对象连接起来,使用string作为分隔符;
可迭代对象本身元素都是字符串;
返回一个新字符串;
lst = ['1','2','3'] print("\"".join(lst)) #分隔符是双引号 >>> 1"2"3 print("\n".join(lst)) print(" ".join(lst)) lst = ['1',['a','b'],'3'] print(" ".join(lst)) TypeError: sequence item 1: expected str instance, list found
字符串 + 连接
+ -> str
将2个字符串连接在一起;
返回一个新字符串
print('ab'+'de')
字符串分割
分割字符串的方法分为2类:
split类
将字符串按照分隔符分割成若干字符串,并返回列表
partition系
将字符串按照分隔符分割成2段,返回这2段和分隔符的元组
split:
S.split(sep=None, maxsplit=-1) -> list of strings 从左至右; sep指定分割字符串,缺省的情况下空白字符串作为分隔符; maxsplit指定分割的次数,-1表示遍历整个字符串;
s1 = "I'm \ta super student." s1.split() ["I'm", 'a', 'super', 'student.'] s1.split('s') ["I'm \ta ", 'uper ', 'tudent.'] s1.split('super') ["I'm \ta ", ' student.'] s1.split(' ',maxsplit=2) ["I'm", '\ta', 'super student.']
rsplit:
S.rsplit(sep=None, maxsplit=-1) -> list of strings 从右至左; sep指字分隔字符串,缺省的情况下空白字符串作为分隔符; maxsplit指字分割的次数, -1 表示遍历整个字符串;
splitlines:
S.splitlines([keepends]) -> list of strings 按照行来切分字符串; keepends指的是是否保留行为隔符; 行分隔符包括\n 、\r\n 、 \r等;
'ab c\n\nde fg\rkl\r\n'.splitlines() ['ab c', '', 'de fg', 'kl'] 'ab c\n\nde fg\rkl\r\n'.splitlines(True) ['ab c\n', '\n', 'de fg\r', 'kl\r\n'] s1 = '''I'm a super student. You're a super teacher.''' print(s1) I'm a super student. You're a super teacher. print(s1.splitlines()) ["I'm a super student.", "You're a super teacher."] print(s1.splitlines(True)) ["I'm a super student.\n", "You're a super teacher."]
*partition:
S.partition(sep) -> (head, sep, tail)
从左至右,遇到分隔符就把字符串分割成两部分,返回头、分隔符、尾三部分的三元组;
如果没有找到分隔符,就返回头、2个空元素的三元组
sep分割字符串,必须指定
s1 = "I'm a super student." s1.partition('s') ("I'm a ", 's', 'uper student.') s1.partition('stu') ("I'm a super ", 'stu', 'dent.') s1.partition(' ') ("I'm", ' ', 'a super student.') s1.partition('abc') ("I'm a super student.", '', '')
rpartition:
S.rpartition(sep) -> (head, sep, tail) 从右至左,遇到分隔符就把字符串分割成两部分,返回头、分割符、尾三部分的三元组; 如果没有找到分隔符,就返回2个空元素和尾的三元组
字符串大小写:
upper() 全大写 lower() 全小写 swapcase() 交互大小写
字符串排版:
S.title() -> str 标题的每个单词都大写 S.capitalize() -> str 首字单词大写 S.center(width[, fillchar]) -> str width 打印宽度;fillchar 填充的字符 "china".center(10,'#') '##china###' S.zfill(width) -> str width打印宽度,居右,左边用0填充 "china".zfill(10) '00000china' S.ljust(width[, fillchar]) -> str 左对齐 "china".ljust(10) 'china ' S.rjust(width[, fillchar]) -> str 右对齐 "china".rjust(10) ' china'
字符串修改*
replace:
S.replace(old, new[, count]) -> str 字符串中找到匹配替换为新子串,返回新字符串; count表示替换几次,不指定就是全部替换; 'www.magedu.com'.replace('w','p') 'ppp.magedu.com' 'www.magedu.com'.replace('w','p',2) 'ppw.magedu.com' 'www.magedu.com'.replace('ww','p',2) 'pw.magedu.com' 'www.magedu.com'.replace('www','python',2) 'python.magedu.com'
strip:
S.strip([chars]) -> str 从字符串两端去除指定的字符集chars中的所有字符; 如果chars没有指定,去除两端的空白字符; s = "\r\n \t Hello Python \n \t" s.strip() 'Hello Python' s1 = "I am very very very sorry" s1.strip("Iy") ' am very very very sorr' S.lstrip([chars]) -> str 从左开始 S.rstrip([chars]) -> str 从右开始
字符串查找*
S.find(sub[, start[, end]]) -> int 在指定的区间[strat,end],从左至右,查找子串sub S.rfind(sub[, start[, end]]) -> int 在指定区间[start[,end]],从右至左,查找子串sub s = "I am very very very sorry" s.find('very') 5 s.find('very',5) 5 s.find('very',6,13) -1 s.find('very',10,15) 10 s.find('very',10) 10 s.find('very',-10,-1) 15
字符串查找
len(string) 返回字符串的长度,即字符的个数 S.count(sub[, start[, end]]) -> int 在指定的区间[start,end],从左至右,统计子串sub出现的次数; s = "I am very very very sorry" s.count('very') 3 s.count('very',5) 3 s.count('very',10,14) 1
字符串判断*
S.endswith(suffix[, start[, end]]) -> bool 在指定的区间,字符串是否是suffix结尾; S.startswith(prefix[, start[, end]]) -> bool 在指定的区间,字符串是否是prefix开头; s = "I am very very very sorry" s.startswith('very') False s.startswith('I') True s.startswith('very',5) True s.startswith('very',5,9) True s.endswith('sorry',5) True s.endswith('sorry',5,-1) False s.endswith('sorry',5,100) True
字符串判断is系统:
isalnum() 是否是字母和数字组成 isalpha() 是否是字母 isdecimal() 是否只包含十进制数字 isdigit() 是否全部数字(0~9) isidentifier() 是不是字母和下划线开头,其他都是字母、数字、下划线 islower() 是否都是小写 isupper() 是否全部大写 isspace() 是否只包含空白字符
字符串格式化***
字符串的格式化是一种拼接字符串输出样式的手段,更灵活方便
join拼接只能使用分隔符,且要求被拼接的是可迭代对象
+拼接字符串还算方便,但是非字符串需要先转换为字符串才能拼接
在2.5版本之前,只能使用printf style风格的print输出
printf-style formatting,来自于C语言的printf函数
格式要求:
占位符:使用%和格式字符组成,例如%s、%d等
s调用str(),r会调用repr()。所有对象都可以被这两个转换。
占位符中还可以插入修饰字符,例如%03d表示打印3个位置,不够前面补零
format % values,格式字符串和被格式的值之间使用%分隔
values只能是一个对象,或是一个和格式字符串占位符数目相等的元组,或一个字典
举例:
printf-style formatting风格: "I am %03d"%(20,) 'I am 020' 'I like %s.'% 'python' 'I like python.' '%3.2f%%,0x%x,0x%02x' % (89.7654,10,15) '89.77%,0xa,0x0f' "I am %-5d" % (20,) 'I am 20 '
format函数格式字符串语法——Python鼓励使用
“{} {xxx}”.format(*args, **kwargs) -> str args是位置参数,是一个元组 kwargs是关键字参数,是一个字典 花括号表示占位符 {}表示按照顺序匹配位置参数,{n}表示取位置参数索引为n的值 {xxx}表示在关键字参数中搜索名称一致的 {{}}表示打印花括号 位置参数: print('{}:{}'.format('192.168.1.100',8888)) 192.168.1.100:8888 #这就是按照位置顺序用位置参数替换前面的格式字符串的占位符中 关键字参数或命名参数: print('{server}{1}:{0}'.format(8888,'192.168.1.100',server='Web Server Info : ')) Web Server Info : 192.168.1.100:8888 #位置参数按照序号匹配 访问元素: print('{0[0]}.{0[1]}'.format(('magedu','com'))) magedu.com 对象属性访问: from collections import namedtuple Point = namedtuple('Point','x y') p = Point(4,5) print('{{{0.x},{0.y}}}'.format(p)) {4,5}
对齐:
'{0}*{1}={2:<2}'.format(3,2,2*3) '3*2=6 ' '{0}*{1}={2:<02}'.format(3,2,2*3) '3*2=60' '{0}*{1}={2:>02}'.format(3,2,2*3) '3*2=06' '{:^30}'.format('centered') ' centered ' '{:*^30}'.format('centered') '***********centered***********'
进制:
"int: {0:d}; hex: {0:x}; oct {0:o}; bin: {0:b}".format(42) 'int: 42; hex: 2a; oct 52; bin: 101010' "int: {0:d}; hex: {0:#x}; oct {0:#o}; bin: {0:#b}".format(42) 'int: 42; hex: 0x2a; oct 0o52; bin: 0b101010' octets = [192,168,0,1] '{:02x}{:02x}{:02x}{:02x}'.format(*octets) 'c0a80001'