Python-基础-字符串小结
##字符串
###简介 字符串序列 用于表示和存储文本,python中字符串是不可变的,一旦声明,不能改变
通常由单引号(’ ),双引号(" ),三引号(’’’ “”")包围
其中三引号可以由多行组成,编写多行文本的快捷语法,常用语文档字符串,在文件的特定地点,被当做注释。便捷的多行注释
Python实际三类字符串:
1.通常意义字符串(str)
2.原始字符串,以大写R 或 小写r开始,r'',不对特殊字符进行转义
3.Unicode字符串,u'' basestring子类
在 Python 中,字符串是“不可改变的序列”
1.不可变
2.满足序列基本操作,按位置存取,切片及索引
####字符串
1.获得帮助:
>>> help(str)
>>> dir(str)
>>> help(str.replace)
2.不可变性
在创建之后就不能就地改变(同java),不能通过对其某一位置进行赋值而改变字符 划分为不可变序列,这些字符串所包含的字符存在从左到右的顺序,不可在原处修改。 python中字符串相当于一个不可变序列的列表,一旦声明,每个字符位置固定
意味着若想改变,必须新建一个!
>>>s=’spam’
>>>s[0]=’k’ #TypeError
#修改字符串类似java,重新赋值
s = ‘k’ + s[1:]
####原始字符串 原始字符串常量,r”abcd”,(r/R)即去掉了反斜线转义机制。关闭转义机制,即\不再表示转义
用处:
1.正则表达式
用于处理正则表达式,减少反斜杠
:::python
p4search = re.compile(r'\s*')
2.系统路径
可以方便地表示系统路径
:::python
path = r'e:\book'
####unicode字符串
Unicode是书写国际文本的标准方法。
Python允许你处理Unicode文本——你只需要在字符串前加上前缀u或U。例如,u"This is a Unicode string."
BP: 在你处理文本文件的时候使用Unicode字符串,特别是当你知道这个文件含有用非英语的语言写的文本。
###常用操作 1.基本操作
+ :string1+string2 #联接字符串,将后一个串链接到前一个串的后面
Python不允许在+表达式中出现其他类型,需要手工转【这点不同于java】‘abc’+str(9)
* :string*n #创建一个新字符串重复n次原来的串
[] :string[n] #从字符串中获取对应位置的一个字符
[:] :string[n:m] #截取字符串,如果为:m从头到m如果为n:从n到尾
in :char in string #判断一个字符是否在串中,如果在返回为真(True)
not in :char not in string #判断一个字符是否不在串中,如果在返回为真(True)
r/R : r/Rstring #禁止转义字符的实际意义,整个字符为原始意义
len() : 长度len(s)
2.类型转换
- 字符串和数字相互转换
字符串到数字 int/float/long
数字到字符串 str
>>> int(42)
42
>>> int('42')
42
>>> str(42)
'42'
>>> float('42.0')
42.0
>>> str(42.0)
'42.0'
或者使用string模块的函数
s:进行转换的字符串, base:可选,目标进制
:::python
import string
string.atoi(s[,base]) #base默认为10,如果为0,那么s就可以是012或0x23这种形式的字符串,如果是16那么s就只能是0x23或0X12这种形式的字符串
string.atol(s[,base]) #转成long
string.atof(s[,base]) #转成float
- 字符串和列表的转换
字符串转列表:
:::python
s=’spam’
l = list(s)
l2 = "hello world".spilt()
列表转字符串
:::python
k = ‘’.join(l)
注意,不能join列表中的非字符串
3.修改字符串
:::python
s = s + ’a’
s = s[3:] + ‘b’
s = s.replace(‘pl’,’pa’)
a = '' #赋值空
del a #整个变量删除
4.索引和分片
索引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🅱️-2] 步长为负数,两个边界意义反转了,表示从b+1到a,步长-2
s=’abcdefg’
s[5:1:-1] 得到 fedc
s[1:3] == s[slice(1,3)] 内置函数
###字符串格式化
这里只介绍基本字符串格式化,扩展在后续篇幅介绍 %c 单个字符 %d 十进制整数 %o 八进制整数 %s 字符串 %x 十六进制整数,其中字母小写 %X 十六进制整数,其中字母大写
>>> str = "so %s a day!"
>>> str % 'beautiful'
'so beautiful a day!'
>>> '{0} is {1}'.format('a','b')
'a is b'
>>> template = "{0}, {1} and {2}"
>>> template.format('a', 'b', 'c')
'a, b and c'
###内建函数列表 【字符串方法是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,不存在报异常,ValueError ####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) 获取字符串的长度
###最佳实践 1.循环中用到长度
:::python
while i < len(stri):
#修改
size = len(stri)
while i < size
2.字符串追加
:::python
l = ['a', 'b']
result = ''
for i in l:
result += i
#修改
result = ''.join(l)
###其他 1.转义符
几个常用:
\n换行,\\反斜杠
\t制表 \'单引号
\r回车 \"双引号
###后续需扩展
字符串编码详解
字符串格式化
正则表达式
字符串涉及常用模块(序列化/文本包装等)
The end!
To be continue
wklken
Email: wklken@yeah.net
Blog: http://blog.csdn.net/wklken
2013-03-10
转载请注明出处,谢谢