1.定义
A.字符串
Python字符串:一个有序的字符集合,用来存储和表现基于文本的信息
用于表示和存储文本,是单个字符的序列, 符合序列操作
python中字符串是不可变的,一旦声明,不能改变
通常由单引号(' ),双引号(" ),三引号(''' """)包围,其中单引号和双引号可互换,三引号可以由多行组成
三引号,多行字符串块,编写多行文本的快捷语法,常用语文档字符串,在文件的特定地点,被当做注释。便捷的多行注释。
B.原始字符串(raw string)
原始字符串常量,r”abcd”,即去掉了反斜线转义机制。关闭转义机制,常见于正则表达式
特殊字符串,以大写R 或小写r开始,为正则表达式设计的,其中\不再表示转义
【用于处理正则表达式,减少反斜杠】
path = r'e:\book'
可以方便地表示系统路径
C.转义符
\n换行,\\反斜杠
\t制表 \'单引号
\r回车 \"双引号
D.特性
不可变性:在创建之后就不能就地改变(同java),不能通过对其某一位置进行赋值而改变字符
划分为不可变序列,这些字符串所包含的字符存在从左到右的顺序,不可在原处修改。
python中字符串相当于一个不可变序列的列表,一旦声明,每个字符位置固定
>>>s=’spam’
>>>s[0]=’k’ #TypeError
修改字符串类似java,重新赋值
s = ‘k’ + s[1:]
2.基本操作:
A.base op
长度len(s)
连接‘s ’ + ‘pam’ 或 ‘s’’pam’ [建议使用前者,可读性
重复: ‘HI’*4
Python不允许在+表达式中出现其他类型,需要手工转【这点不同于java】
‘abc’+str(9)
B.字符串转换:
int(‘42’)
str(42)
float(’42.0’)
字符串与数字相互转换
string.atoi(s[,base]) 字符串-》数字
s:进行转换的字符串
base:可选,目标进制
str() 数字-》字符串
str(4)
ord(‘s’) #转ASCII
chr(115) #转字符
字符串和列表的转换
s=’spam’
l = list(s)
k = ‘’.join(l)
C. 修改字符串:
s = s+’a’
s = s[3:] + ‘b’
s = s.replace(‘pl’,’pa’)
D. 索引和分片
正序获取:str[0]
倒序获取:str[-i] 其中最后一个字符序号为-1
str[a:b] a到b-1区间内的字符串
str[0:-2]与str[:-2]一样
索引s[i]
s[0]首个
s[-1] = s[len(s)-1] 倒数第一个
分片s[i:j]
不含上边界,s[1:3] 取[1-2]
s[1:]取1到结束 s[:3] 取开始到2
s[:-1]开始到倒数第二个
s[:]开始到结尾,相当于一个复制
s[1:10:2] 取1-9,步长=2
s[a:b:-2] 步长为负数,两个边界意义反转了,表示从b+1到a,步长-2
s=’abcdefg’ s[5:1:-1] 得到 fedc
s[1:3] == s[slice(1,3)] 内置函数
3.字符串内建函数
【字符串方法是python文本处理头号工具】
string.capitalize() | 字符串第一个字符大写 |
string.center(width,[,fill]) | 原字符居中,空格填充至width长度 |
string.count(str,beg=0,end=len(string)) | 获得字符串中某一个子串的数目,计算出现次数,可指定范围 |
string.decode(encoding=’UTF-8’,errors=’strict’) | 解码字符串,出错默认报ValueError,除非errors是ignore或replace |
string.encode(encoding=’UTF-8’,errors=’strict’) |
|
string.endswith(suffix,beg=0,end=len(string)) | 是否以**结尾 |
string.expandtabs(tabsize=8) | 把字符串中tab转为空格,默认8个 |
string.find(str,beg=0,end=len(stirng)) | 检测是否包含str,存在返回开始索引,否则返回-1 |
string.index(str,begin=0,end=len(string)) | 同find,不存在报异常 |
string.isalnum() | 至少一个字符,且所有字符均为字母或数字,True. 检测字符串是否只包含0-9A-Za-z |
string.isalpha() | 至少一个字符,所有字符都是字母,True. 检测字符串是否只包含字母 |
string.isdecimal() | 只包含十进制数,True |
stirng.isdigit() | 只包含数字,True. 检测字符串是否仅包含数字 |
string.islower() | 至少一个区分大小写字符且所有字符小写,True. 检测字符串是否均为小写字母 |
string.isnumeric() | 只含数字字符,True |
string.isspace() | 只包含空格,True. 检测字符串是否均为空白字符 |
string.istitle() | 标题化字符,True. 检测字符串中的单词是否为首字母大写 |
string.isupper() | 至少一个区分大小写字符且所有字符大写,True. 检测字符串是否均为大写字母 |
string.join(seq) | 以string作为分隔符,seq中所有元素合并为新的字符串. 将原字符串插入参数字符串中的每两个字符之间 |
string.ljust(width) | 返回一个原字符串左对齐,空格补充至长度width |
string.lower() | 转小写. 将字符串全部转为小写 |
string.lstrip() | 截掉左侧的空格 |
string.partition(str) | = find+split,从str出现第一个位置,截断为pre_str,str,after_str元组,不含str则pre_str=str |
string.replace(str1,str2,num=string.count(str1)) | 替换,指定不超过num次,可作为模板实现 |
string.rfind(str,beg=0,end=len(string)) | 同find,右边开始 |
string.rindex(str,beg=0,end=len(string)) | 同index,右边开始 |
string.rjust(width) | 右对齐,空格补齐 |
string.rpartition(str) | 同partition,右边开始 |
string.rstrip([chars]) | 清理右侧空白,包括换行符,返回处理后字符串 |
string.split(str=””, maxsplit =string.count(str))
| 以str切片,可指定分割次数, 分割字符串,返回列表,默认分隔符空格 |
string.splitlines(num=string.count(‘\n’)) s.splitlines([keepends]) | 按行分隔,可指定分割次数 |
string.startswith(obj,beg=0,end=len(string)) | 以str开头,True. 检测字符串是否以某一子串开头 |
string.strip([obj]) | 在string上执行lstrip和rstrip |
string.swapcase | 反转string中大小写. 字符串中小写转大写,大写转小写 |
string.title() | 标题花,单词首字母大写,其余小写 |
string.translate(str,del=””) s.translate(table) | 根据str给出表转换string字符,要过滤的字符放在del参数中 |
string.upper() | 转大写. 将字符串全部转为大写 |
string.zfill(width) | 返回长度width的字符串,原字符串右对齐,前面填充0 |
len(string) | 获取字符串的长度 |
4.格式化输出字符串
%c 单个字符
%d 十进制整数
%o 八进制整数
%s 字符串
%x 十六进制整数,其中字母小写
%X 十六进制整数,其中字母大写
str = "so %s a day!"
str % 'beautiful'
“%s,a,b” %”TOM” 格式化
‘{0} is {1}’.format(‘a’,’b’)
%[(name)][flags][width][,precision]typecode
-左对齐 +正负号 0补0
%-6d六位左对齐
%06d六位补零
基于字典的格式化
“%(n)d %(x)x” % {“n”:1 , “x”:spam}
python2.6之后格式化新方法:
可以通过位置或关键字进行填充
template = “{0}, {1} and {2}”
template.format(‘spam’,’ham’,’eggs’)
template = “{motto},{pork} and food”
template.format (motto=”a”,port = ‘ham’,food=’eggs’)
template = “{motto}, {0} and {food}”
template.format(‘ham’,motto=”a”,food=”b”)
存在其他更强大的用法,参见p198
格式化字符串:
pattern = “%s -----%s”
c = parttern %(a,b) #格式化后总返回新的字符串
5.字符串相关模块:
string 字符串相关类和函数,例如Template re正则表达式模块 struct字符串和二进制转换 c/StringIO字符串缓冲对象,操作方法类似file base64 Base16,32,64数据编解码 codecs解码器注册和基类 crypt进行单方面加密 difflib找出序列不同 hashlib多种不同安全哈希算法和信息摘要算法的API hma HMAC信息鉴权算法python实现 md5 RSA的MD5信息摘要鉴权 rotor提供多平台加密解密服务 sha NIAT的安全哈希算法SHA stringprep提供用于IP协议的Unicode字符串 textwrap 文本包装和填充 unicodedata Unicode数据库 |
6.其他
A.获得帮助
>>>help(str)
>>> dir(str)
>>> help(str.replace)
大家还是直接看代码比较直接,以下是代码及其运行结果:
结果