python入门5...
时间:2010-08-11 来源:hx_jinqiang
#20100805
#字符串
#在Python中字符串变成了一种强大的处理工具集
#Python的字符串被划分为不可变序列这一类别,意味着这些字符串所包含的字符存在从左至右的位置顺序,并且它们不可以在原处修改。
'''
操作 解释
s1 = ' ' 空字符串
s2 = "spam'a" 双引号
s3 = r'\tmep\spam' Raw字符串
s4 = u'spam' Unincode字符串
s1 + s2 合并
s2 * 3 重复
s2[i] 索引
s2[i:j] 分片
len(s2) 求长度
"a %s parrot" % type 字符串格式化
s2.find('pa') 搜索
s2.rstrip() 移除空格
s2.replace('pa','xx') 替换
s1.split(',') 用展位符分隔
s1.isdigit() 内容测试
s1.lower() 短信息转换
for x in s2
'spam' in s2 迭代,成员关系
'''
'''
title = "Meaning " 'of\'s' " Life"
print title
s = 'a\nb\tc'
print s
print len(s)
'''
#python 提供了一套转义字符序列
# 转义 意义
# \newline 忽视(连接)
# \\ 反斜线(保留\)
# \' 单引号(保留')
# \" 双引号(保留")
# \a 响铃
# \b 倒退
# \f 换页
# \n 换行
# \r 返回
# \t 水平制表符
# \v 垂直制表符
# \N{id} Unicode数据库id
# \uhhhh Unicode 16位的十六进制
# \Uhhhh... Unicode 32位的十六进制
# \xhh 十六进制
# \ooo 八进制
# \0 Null(不是字符串结尾)
# \other 不转义(保留)
'''
一些转义序列允许你一个字符串的字节中嵌入绝对的二进制值
>>> s = 'a\0b\0c'
>>> s
'a\x00b\x00c'
>>> len(s)
5
>>>
Python中 0(零)字符不会像C语言那样去中断一个字符串
>>> s = '\001\002\x03'
>>> s
'\x01\x02\x03'
>>> len(s)
3
>>>
字符串抑制转义
Windows打开文件时的特殊例子:
>>> myfile = open('C:\new\test.dat','w')
Traceback (most recent call last):
File "<pyshell#123>", line 1, in <module>
myfile = open('C:\new\test.dat','w')
IOError: [Errno 2] No such file or directory: 'C:\new\test.dat'
>>>
r (大写或小写)出现在字符串的第一个引号前面,将会关闭转义机制
>>> myfile = open(r'C:\new\test.dat','w')
>>>
另外一种方法
>>> myfile = open('C:\\new\\test.dat','w')
>>> path = r'C:\new\data.dat'
>>> path
'C:\\new\\data.dat'
>>> print path
C:\new\data.dat
>>> len(path)
15
三重引号编写多行字符串块============
字符串编码更大的字符集==============
Unicode字符串有时称为“宽“字符串。
Unicode字符串典型地应用于支持国际化的应用
在Pyhon中,可以在脚本中通过开头的引号前增加字母U(大写或小写)编写个Unicode字符串
>>> u'spam'
u'spam'
>>> 'ni' + u'spam'
u'nispam'
>>>
Unicode字符串也可以被合并、索引、分片、通过re模块进行分配,并且不能够在进行实地修改
>>> str(u'spam')
'spam'
>>> unicode('spam')
u'spam'
>>>
myjob = "technicaleng"
for i in myjob:
print i,
for i in myjob:
print i
'''
#字符串转换工具
#int函数将字符串转换为数字
#str将数字转换为字符串表达形式
#函数int和float只能够对数字进行转换。
#混合字符串和数字类型进行+这样的操作,你能够在进行这样的操作之前手动进行转换
a = "42"
b = 1
#显示数字
print int(a) + b
#显示字符串
print a + str(b)
#字符串代码转换
#单个的字符也可以通过将其传给内置的ord函数转换为其对应的ASCII码---这个函数实际上返回的是这个字符在内存中对应的字符的二进制值。
#chr函数将会执行相反的操作,获取ASCII码,并将其转化为对应的字符。
print ord('s')
print chr(115)
print chr(100)
s = '5'
s = chr(ord(s) + 1)
print s
s = chr(ord(s) + 1)
print s
print int('5')
print ord('5') - ord('0')
#转换可以与循环语句一起使用,可以将一个表示二进制数的字符串转换为等值的整数--
B = '1101'
I = 0
while B:
I = I * 2 + (ord(B[0]) - ord('0'))
B = B[1:]
print I
#修改字符串,不能再实地修改一个字符串,例如 给一个索引进行赋值
S = 'Spam'
print S
print S + 'SPAM!'
print S[:4] + 'Burger' + S[-1]
print S.replace('pa', 'JinQiang')
#字符串格式化
#字符串格式化表达式来创建新的文本值
print 'That is %d %s bird!' % (1,'dead')
#Python在对字符串操作的时候定义了%二进制操作符,%应用在字符串中,是对字符串的值进行格式化,这一操作取决于格式化定义的字符串
#1、在%操作符的左侧位置放置一个需要进行格式化的字符串,这个字符串带有一个或多个嵌入的转换目标,都以%号开头(例如 %d)
#2、在%操作符的右侧位置放置一个对象(或多个,在括号内),这些对象将会插入到左侧想让Python进行格式化字符串的(或多个)转换目标的位置上去。
myexport = 'NI'
print 'Hello %s hao a' % myexport
print 'Hao are you %s %s %s %s %s' % ('What','are','you','doing',4)
#除非你要做特殊格式化,一般你只需要记得用%s这个代码来格式化表达式。
#格式化总是返回新的字符串作为结果而不是对左侧的字符串进行修改;由于字符串是不可变的,所以只能这样操作。可以分配一个变量名来保存结果
#更高级的字符串格式化
'''
代码 意义
%s 字符串(或任何对象)
%r s,但使用repr,而不是str
%c 字符
%d 十进制(整数)
%i 整数
%u 无号
%o 八进位整数
%x 十六进制整数
%X X,但打印大写
%e 浮点指数
%E e,但打印大写
%f 浮点十进制
%g 浮点e或f
%G 浮点E或f
%% %常量
'''
#对整数进行默认格式化,然后进行6位的左对齐格式化,最后进行了6位补0的格式化
x = 1234
res = "integers: ...%d...%-6d...%06d" % (x,x,x)
print res
x = 1.23456789
print x
print '%e | %f | %g' % (x,x,x)
#基于字典的字符串格式化
#字符串的格式化同时也允许左边的转换目标来引用右边字典中的键来提取对应的值。
print "%(n)d %(x)s" % {"n":1,"x":'Spam'}
#建立一个数值字典,并利用一个基于键的引用的格式化表达式一次性替换他们。
reply = '''
greetints ...
hello %(name)s!
You are squared is %(age)s
'''
values = {'name':'alice','age':45}
print reply % values
#常与内置函数vars联系起来一起使用,这个函数返回的字典包含了所有在本函数调用时存在的变量。
food = 'apple'
age = 25
print vars()
print "%(age)d %(food)s" % vars()
#字符串方法:
#属性读取
#具有object.attribute格式的表达式可以理解为"读取object对象的属性attribute的值"
#函数调用表达式:
#具有函数(参数)格式的表达式意味着”调用函数代码,传递零或者更多逗号隔开的参数值对象,最后返回函数的返回值
#Python首先读取对象方法,然后调用它,传递参数。
#全部替换
print 'aa$bb$cc$dd'.replace('$','XU')
#只把第一个$换成XU
print 'aa$bb$cc$dd'.replace('$','XU',1)
#把前两个$换成XU
print 'aa$bb$cc$dd'.replace('$','XU',2)
print 'aa$bb$cc$dd'.replace('$','XU',3)
#如果需要在任何偏移时都被替换一个固定长度的字符串,可以再做一次替换,或者使用字符串方法find搜索的字符,之后使用分片
S = 'xxxxSPAMxxxxSPAMxxxx'
where = S.find('SPAM')
print where
print S
S = S[:where] + 'EGGS' + S[(where+4):]
print S
S = 'spammy'
L = list(S)
print L
L[3] = 'X'
L[4] = 'U'
print L
print S
#合成 一个字符串
S = ''.join(L)
print S
#split 提取组件,将一个字符串分割为一个子字符串的列表,以分隔字符串为标准。
#默认分隔符为空格
line = 'aaa bbb ccc'
cols = line.split()
print cols
#以,号为分隔符
line = 'alice,bob,dive'
print line.split(',')
#以字符串为分隔符
line = 'nihaoSPAMaliceSPAMbob'
print line.split('SPAM')