Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12788
  • 博文数量: 5
  • 博客积分: 240
  • 博客等级: 二等列兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-02 16:45
文章分类

全部博文(5)

文章存档

2012年(5)

我的朋友

分类: Python/Ruby

2012-08-03 16:54:06

3.1基本字符串操作
1.字符串和元组一样,是不可改变的
2.标准序列操作,如果索引、分片、求最值等操作对字符串同样适用。注:因为不可改变,分片无法赋值操作

3.2字符串格式化:精简版
使用%实现,注:%也可用作取模操作
%左边:格式化的字符串
%右边:希望格式化的值 (可以使一个字符串或数字,也可以用多个值的元组或字典)
eg: format="Hello, %s. This is %s." #%s转换说明符,详见后
values=('World','Anna') #如果是序列,就会解释成一个值。
print format % values #Hello, World. This is Anna.
如果需转化的字符串中有%,要使用%%
转化浮点数,用f,同时需提供精度
eg: format="Pi with 3 decimals:%.2f"
from math import pi
print format % pi #pi with 3 decimals:3.14
string模块提供另一种格式化方法:模板字符串
eg: from string import Template
s=Template('$x,glorious,$x!')
print s.substitute(x='slurm') #slurm,glorious,slurm!
s=Template('You are luck${x}') #替换是单词的一部分,变量需用{},其实同shell变量赋值一样
print s.substitute(x='ing') #You are lucking
可以用$$插入$
可以用字典变量提供值:
s=Template('$time: $where: $who: $what' ) #变量名不可用中文
w={}
w['time']='25年前' #首先以ansi输入中文,之后转换成utf8,运行时就无乱码
w['where']='上海'
w['who']='我'
w['what']='诞生了'
print s.substitute(w)   #25年前: 上海: 我: 诞生了

3.3字符串格式化:完整版
eg:print '%s plus %s equals %s' % (1,1,2) #1 plus 1 equals 2
基本转换说明符说明:
%: 标记转化说明符的开始
转换标志(可选): -表示左对齐;
  +表示在转换值前加正负号;
  ""(空白字符)表示正数前保留空格;
  0表示转换值若位数不够用0填充
最小字段宽度(可选): 转换后的字符串至少应具有该值指定宽度,如果是*,则宽度会从值元组中读出
点.后跟精度值(可选): 如果转换的是实数,精度值就表示出现在小数点后的位数
      如果是字符串,该数值就表示最大字段宽度。
      如果是*,精度从元组中读出
转换类型: d,i 带符号的十进制整数
o 不带符号的八进制
u 不带符号的十进制
x 不带符号的十六进制小写
X 不带符号的十六进制大写
e 科学计数法表示浮点数小写
E 科学计数法表示浮点数大写
f,F 十进制浮点数
g 如果指数大于-4或者小于精度精度值则=e,否则=f
G 如果指数大于-4或者小于精度精度值则=E,否则=F
C 单字符(整数或者单个字符串)
r 字符串(使用repr转换)
s 字符串(使用str转换)
3.31简单转换
只需写出转换类型
eg:print 'Price of eggs: $%d' % 24 #Price of eggs: $24
  print 'Hexadecimal price of eggs: %x' % 24 #Hexadecimal price of eggs: 18
  print 'Pi is %f...' % pi #Pi is 3.141593...
3.32字段宽度和精度
2个参数均为整数,宽度表示保留的最小字符个数,先宽度再精度,通过.分隔,如果只给出精度,需包括.
eg:print '%10f' % pi #∟∟3.141593
  print '%5.2f' % pi #∟3.14
  print '%.2f' % pi #3.14
  print '%.5s' % 'ABC DEF GHI' #ABC D
可以使用*作为宽度或精度,数值就会从元组参数中读出
eg:print '%.*s' % (5,'ABC DEF GHI') #ABC D
3.33符号、对齐和0填充
在宽度和精度之前,还可以放‘标表’,可以是0,加号,减号,空格
eg:print '%05.2f' % pi #03.14
  print '%-5.2f' % pi #3.14∟
  print '%+5.2f' % pi #+3.14
  print '% 5.2f' % pi #∟3.14
  #使用给定宽度打印格式化后的价格列表
width=input('Please enter width[num]:')
price_width=10
item_width=width - price_width
header_format='%-*s%*s' #第一个*是item_width,第二个*是price_width,-是向后占用空白
format='%-*s%*.2f'
print '=' * width
print header_format % (item_width,'Item',price_width,'Price')
print '-' * width
print format % (item_width,'Apple',price_width,4.2)
print format % (item_width,'Banana',price_width,3.33)
print format % (item_width,'Mongo',price_width,14.5)
print format % (item_width,'Prune',price_width,4.2)
print '=' * width

3.4字符串方法
字符串从string模块继承很多方法
字符串常量:
string.digits 数字0-9的字符串
string.letters 所有字符大小写的字符串
string.lowercase 所有小写字母字符串
string.uppercase 所有大写字母字符串
string.printable 所有可打印字符的字符串
string.punctuation 所有标点的字符串
字母字符串常量与地区有关,取决于python配置的语言,如使用ascii,那就是string.ascii_letters
3.41find
在较长的字符串中查找子字符串,返回子串所在位置的最左端索引,没找到就返回-1
in只能返回布尔值。
eg: sub='with a moo-moo here,and a moo-moo there'
print sub.find('moo')   #7,从0开始计数
#find还可以接受可选的起始点和结束点参数
  print sub.find('moo',10,15) #11,从第10个位开始到14,即返回-之后的moo位置
3.42jion
是split的逆方法,用来在队列中添加元素,且必须都是字符串
eg:dir=['python','php','perl']
  punctuation='/'
  print punctuation.join(dir) #python/php/perl
3.43lower
返回小写字符串
eg:print 'ABC'.lower() #abc
3.44replace
返回某字符串的所有匹配项均被替换后的字符串
eg: print 'THIS IS TEST'.replace('S','*') #THI* I* TE*T
3.45split
将字符串分隔成序列
如果不提供分隔符,默认为空格
eg:print '1st,2nd,3rd,4th'.split() #['1st,2nd,3rd,4th']
  print '1st,2nd,3rd,4th'.split(',') #['1st', '2nd', '3rd', '4th']
3.46strip
string.strip(char) 返回字符串,其中所有char都从字符串开头和结尾去除,默认为空格
eg:print 'aaaa this is a aaa'.strip('a') #this is a
3.47translate
效果同replace,但只能替换单个字符,但可同时进行多个替换,故效率比replace高
translate有2个参数,第一个是需替换的字符,第二个是需删除的字符,第二个为可选
eg:from string import maketrans #maketrans制作转换表
  trans=maketrans('cs','kz') #maketrans需2个等长字符串做参数,表示第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换
  print 'this is an incredible test'.translate(trans,' ') #thizizaninkredibletezt

字符串有太多方法,具体附录不列了,完整可在官网文档中找到
阅读(779) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~