博客迁往:新地址 (点击直达)
新博客使用markdown维护,线下有版本库,自己写的所以会定时更新同步,同时提供更好的导航和阅读体验
csdn对markdown支持不好,所以旧版不会花时间进行同步修订,抱歉
字符串序列用于表示和存储文本,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.正则表达式
用于处理正则表达式,减少反斜杠
p4search = re.compile(r'\s*')
2.系统路径
可以方便地表示系统路径
path = r'e:\book'
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:可选,目标进制
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
字符串转列表:
s=’spam’
l = list(s)
l2 = "hello world".spilt()
列表转字符串
k = ‘’.join(l)
注意,不能join列表中的非字符串
3.修改字符串
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:b:-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文本处理头号工具】
字符串第一个字符大写
原字符居中,空格填充至width长度
获得字符串中某一个子串的数目,计算出现次数,可指定范围
解码字符串,出错默认报ValueError,除非errors是ignore或replace
是否以**结尾
把字符串中tab转为空格,默认8个
检测是否包含str,存在返回开始索引,否则返回-1
同find,不存在报异常,ValueError
至少一个字符,且所有字符均为字母或数字,True. 检测字符串是否只包含0-9A-Za-z
至少一个字符,所有字符都是字母,True. 检测字符串是否只包含字母
只包含十进制数,True
只包含数字,True. 检测字符串是否仅包含数字
至少一个区分大小写字符且所有字符小写,True. 检测字符串是否均为小写字母
只含数字字符,True
只包含空格,True. 检测字符串是否均为空白字符
标题化字符,True. 检测字符串中的单词是否为首字母大写
至少一个区分大小写字符且所有字符大写,True. 检测字符串是否均为大写字母
以string作为分隔符,seq中所有元素合并为新的字符串. 将原字符串插入参数字符串中的每两个字符之间
返回一个原字符串左对齐,空格补充至长度width
转小写. 将字符串全部转为小写
截掉左侧的空格
= find+split,从str出现第一个位置,截断为pre_str,str,after_str元组,不含str则pre_str=strstring.replace(str1,str2,num=string.count(str1))替换,指定不超过num次,可作为模板实现
同find,右边开始
同index,右边开始
右对齐,空格补齐
同partition,右边开始
清理右侧空白,包括换行符,返回处理后字符串
以str切片,可指定分割次数, 分割字符串,返回列表,默认分隔符空格
s.splitlines([keepends])按行分隔,可指定分割次数
以str开头,True. 检测字符串是否以某一子串开头
在string上执行lstrip和rstrip
反转string中大小写. 字符串中小写转大写,大写转小写
标题花,单词首字母大写,其余小写
s.translate(table)根据str给出表转换string字符,要过滤的字符放在del参数中
转大写. 将字符串全部转为大写
返回长度width的字符串,原字符串右对齐,前面填充0
获取字符串的长度
1.循环中用到长度
while i < len(stri):
#修改
size = len(stri)
while i < size
2.字符串追加
l = ['a', 'b']
result = ''
for i in l:
result += i
#修改
result = ''.join(l)
1.转义符
几个常用:
\n换行,\\反斜杠
\t制表 \'单引号
\r回车 \"双引号
字符串编码详解
字符串格式化
正则表达式
字符串涉及常用模块(序列化/文本包装等)
The end!
To be continue
wklken
Email: [email protected]
Blog: http://blog.csdn.net/wklken
2013-03-10
转载请注明出处,谢谢