设为首页 收藏本站
查看: 1361|回复: 0

[经验分享] python学习笔记(三)——字符串

[复制链接]

尚未签到

发表于 2015-4-22 10:41:55 | 显示全部楼层 |阅读模式
  字符串操作
     字符串在任何一门语言都是一个重点,灵活运用可实现各种强大的功能,在python中,字符串也是如此,标准的序列操作对字符串也使用,但是分片赋值不行,因为字符串是不可变的。
    字符串的格式化:
    字符串格式化使用字符串格式化操作符%来实现,在%左侧放置一个字符串,右侧放置希望格式化的值。看下面这个简单的例子:



>>> format="Hello,%s,I'm studying %s!"
>>> values=('world','Python')
>>> print format % values
Hello,world,I'm studying Python!
  注意:如果使用列表或者其他列表代替元组,那么序列就会被解释为一个值,只有元组和字典和格式化一个以上的值。
        %s标记了需要插入转换值的位置,s表示会被转化为字符串,如果不是字符串,则会用str将其转换为字符串。另外,如果需要在格式化字符串里包括百分号,则必须使用%%。
    如果需要格式化实数,用f说明符类型,同时提供精度;一个据点再加上希望保存的小数位数。因为格式化说明符总是以表示类型的字符结束,所以精度应该放在类型字符前面:




>>> format="PI with three decimals :%.3f"
>>> from math import pi
>>> print format % pi
PI with three decimals :3.142
  格式化操作符的右操作数可以是任何东西,如果是元组或者映射类型(字典),则字符串的格式化略有不同。例如,如果右操作数是元组,则其中每一个I元素都会被单独格式化,每个值都需要一个对应的转换说明符。(注意:如果需要转换的元组作为转换表示的一部分存在,那么必须将它用圆括号括起来)



>>> '%s plus %s equals %s ' %(1,1,2)
'1 plus 1 equals 2 '
   当然,字符串格式化还有很多,比如填充和字宽和精度等,这些带用到时再去查也不迟,下面是一个关于字符串格式化一个较综合的例子,包括字宽和对齐等:



width=input('Please input width:')
price_width=10
item_width=width-price_width
header_format='%-*s%*s'
format ='%-*s%*.2f'
print '=' * width
print header_format % (item_width,'Item',price_width ,'Price')
print '-' * width
print format % (item_width ,'Apples',price_width ,0.4)
print format % (item_width ,'Pears',price_width ,0.5)
print format % (item_width ,'Cantaloupes',price_width ,1.92)
print format % (item_width ,'Dried Apricots(16 oz.)',price_width ,8)
print format % (item_width ,'Prunes(4 lbs.)',price_width ,12)
print '=' * width
raw_input("enter any key to exit~~")

  运行结果如下:
DSC0000.jpg
     字符串方法:
    几乎任何一种语言关于字符串的方法都很多,不过都大同小异,python中字符串方法的思想和数据结构的思想非常相似。
     find——在一个较长的字符串查找子字符串,返回所在位置的最左端索引,下面是常用的用法:




>>> "hello,python,I like python".find('python') #返回的是第一个‘python’的索引
6
>>> title="hahha,hekko,hello"
>>> title.find ('find')  #找不到时返回-1
-1
>>> subject='$$$ Get rich now !!!$$$'
>>> subject.find ('$$$')   #默认返回最左边所在的位置
0
>>> subject.find ('$$$',1)   #指定起始搜索位置
20
>>> subject.find('$$$',0,10)   #指定搜索的上下限,注意包含上线不包含下线
0
   join——用来在队列中添加元素(必须是字符串),是split方法的逆方法,很常用,下面几例是常见用法:



>>> digitals=[1,2,3,4,5]
>>> seperaor='+'
>>> seperaor.join(digitals) #连接数字列表出现错误
Traceback (most recent call last):
File "", line 1, in
seperaor.join(digitals)
TypeError: sequence item 0: expected string, int found
>>> digitals=['1','2','3','4','5']  #改为字符串
>>> seperaor='+'
>>> seperaor.join(digitals)  #连接字符串列表是正确的
'1+2+3+4+5'
>>> dir='','usr','bin','env'
>>> '/'.join(dir)  #Linux下目录的格式
'/usr/bin/env'
>>> print 'C:'+'\\'.join(dir)    #windows下目录格式,注意反斜杠需要转义
C:\usr\bin\env

   lower——返回字符串的小写字母。为了程序的友好有时候需要“忽略”用户输入的大小写,在程序中应使用统一的格式来识别,下面举出常见用法:(upper是类似的用法)



>>> 'Trouble Is a Friend!'.lower()
'trouble is a friend!'
>>> if 'Jzhou' in ['jason','james','jzhou']:  #未转换时没有匹配
print 'Found it!'

>>> name='Jzhou'
>>> names=['jason','james','jzhou']
>>> if name.lower() in names:   #将转换为小写进行匹配
print 'Found it!'

Found it!
>>>

  title方法和string模块的capwords函数可以将一句话的首字母大写,符合标题习惯(对冠词的处理不太合理)



>>> 'i like python'.title ()
'I Like Python'
>>> import string
>>> string.capwords ("i like python!")
'I Like Python!'
>>>

    replace——返回字符串的所有匹配项均被替换之后得到的字符串



>>> 'this is a test'.replace('test','work')
'this is a work'   #查找并替换

    split——将字符串分割成序列,是join的逆方法,很常用



>>> '1+2+3+4+5'.split('+')
['1', '2', '3', '4', '5']
>>> '/usr/bin/env'.split('/')
['', 'usr', 'bin', 'env']
>>> 'Using the default'.split ()  #如果不提供任何分隔符,默认会把所有空格(包括空格、制表符、换行符等)作为分隔符
['Using', 'the', 'default']

   strip(lstrip,rstrip)——返回出去两侧(不包括内部)空格的字符串,类似C#中的trim函数(ltrim,rtrim)



>>> '      internal whtiespace is kept    '.strip ()
'internal whtiespace is kept'   #默认取出前后的空格
>>> names=['jason','james','jzhou']
>>> name='  jzhou'  #前面有2个空格
>>> if name in names : print 'Found it!'  #不匹配
>>> if name.strip() in names : print 'Found it!'  #取出空格后匹配
Found it!
>>> '****!!SPAM** for ** everyone!!*******'.strip('*!')  #指定要去除的字符
'SPAM** for ** everyone'
>>>

    translate——和replace方法一样,可以替换字符串中的某些部分,但是和replace不同,它只处理单个字符,但同时可进行多个替换,有时效率比replace高。
    使用translate转换之前,需要先完成一张转换表,转换表中是以某字符的对应关系,这个表有多达256个项目,可以使用string模块里的maketrans函数得到。   
    maketrans函数有两个参数:两个等长的字符串,表示第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换,如下例子:



>>> from string import maketrans
>>> table=maketrans('cs','kz') #就是把table中的字符c换成k,字符s换成z
>>> len(table)
256
>>> table[97:123]   #提取处理后的小写字母部分,字符c和s已经被替换了
'abkdefghijklmnopqrztuvwxyz'
>>> maketrans ('','')[97:123]  #这是空转换(即未转换前)的消息字母部分
'abcdefghijklmnopqrstuvwxyz'
>>>

   创建了这个table之后,可以将它用作translate方法的参数,进行字符串的转换,如下:



>>> 'this is an incredibele test'.translate(table)
'thiz iz an inkredibele tezt'

  translate的第二个参数是可选的,这个参数用来指定要删除的字符,如将一句话中‘fuck’删除:



>>> 'Hen,fuck is not a good word'.translate(table,'fuck')
'Hen, iz not a good word'
>>> 'Hen,fuck is not a good word'.translate(table,' ')#将空格都删除
'Hen,fukkiznotagoodword'

  字符串的方法有很多,以上这些是比较常用的,可以用到时再去查。
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59544-1-1.html 上篇帖子: Python入门版 下篇帖子: Python注释
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表