zoukankan      html  css  js  c++  java
  • python字符串的操作——python cookbook

    一.文本
    1.每次处理一个字符
    thelist=list(thestring) #把字符串转成字符序列

    2.字符和字符值之间的转换
    >>> print ord('a')
    97
    >>> print chr(97)
    a
    >>> print ord(u'我')
    25105
    >>> print unichr(25105)  #最大到65535

    3.判断一个变量是否是字符串类型
    (1)def isString(anobj):
     return type(anobj) is type('')  #不足:自己编写的str子类不能通过测试,unicode

    也不可以。
    (2)def isAString(anobj):
     return isinstance(anobj,basestring) #内建类型basestring是str和unicode共同的基

    类。

    4.字符串对齐
    print 'hej'.center(20,'+'),'hej'.ljust(20),'hej'.rjust(20)

    5.去除字符串两端的空格
    x='    hej   '
    x.lstrip(),x.rstrip(),x.strip()

    6.合并字符串
    pieces=['a','bdd','aas']
    largeString=''.join(pieces)
    largeString='%s% something '%(small1,small2)

    7.字符串逐字符或逐词翻转
    revchars=astring[::-1]  #逐字符翻转
    revchars=''.join(astring.split()[::-1])  #逐词翻转
    revchars=''.join(reversed(astring.split()))  #逐词翻转

    8.检查字符串中是否包含了某字符集合中的字符
    def contens(seq,aset):
        """"""
        a=[]
        for c in seq:
            if c  in aset:
                a.append(c)
    contens(list('ab'),'adfd')

    9.字符串的translate方法使用

    def translator(frm='',to='',delete='',keep=None):
        if len(to)==1:
            to=to*len(frm)
        trans=string.maketrans(frm,to)
        if keep is not None:
            allchars=string.maketrans('','')
            delete=allchars.translate(allchars,keep.translate(allchars,delete))
        def translate(s):
            return s.translate(trans,delete)
        return translate
    digits_only=translator(frm='123',to='abc', keep=string.digits)
    print digits_only('adsfa123')

    注意:string.maketrans('a','b')返回的是一个字符串,字符串中使用b替换了a,这个字符串的

    长度为256个字符长。所以,前后两个参数的长度必须一致。
    string.maketrans('','')得到的就是全部字符集合在一起的字符串。
    string.translate(s,trans,delete)就是取得s的一个拷贝,根据trans中的映射关系替换字符,

    根据delete中的字符,删除对应的字符。

    10.过滤字符串中不属于指定集合的字符
    ASCII码版:
    import string
    allchars=string.maketrans('','')
    #----------------------------------------------------------------------
    def makefilter(keep):
        """"""
        delchars=allchars.translate(allchars,keep)
        def thefilter(s):
            """"""
            return s.translate(allchars,delchars)
        return thefilter
    if __name__=='__main__':
        just_vowels=makefilter('1234')
        print just_vowels('adfsadf1221ddfdsa')

    UNICOED版:
    #-*-coding:utf-8-*-
    import string
    import sets
    ########################################################################
    class Keeper(object):
        """"""
        def __init__(self,keep):
            """Constructor"""
            self.keep=sets.Set(map(ord,keep))
        def __getitem__(self,n):
            """"""
            if n not in self.keep:
                return None
            return unichr(n)
        def __call__(self,s):
            """"""
            return s.translate(self)
    makefilter=Keeper
    if __name__=='__main__':
        just_vowels=makefilter(u'我')
        print just_vowels(u'我是谁')
           
    11.改变大小写
    >>> 'asdf'.upper()   #所有字符都大写
    'ASDF'
    >>> 'ASDF'.lower()   #所有字符小写
    'asdf'
    >>> print 'my name IS'.capitalize() #字符串首字符大写
    My name is
    >>> print 'mY naMe iS'.title()      #字符串每个词第一个字符大写
    My Name Is

    12.访问子字符串
    afield=theline[3:8]   #只能一次取一个字段

    16.替换字符串中的子串

    #-*-coding:utf-8-*-
    import string
    def expand(format,d,marker='"',safe=True):
        """"""
        if safe:
            def lookup(w): return d.get(w,w.join(['','']))
        else:
            def lookup(w): 
                    return d[w]
        parts=format.split(marker)
        parts[::1]=map(lookup,parts[::1])
        return ''.join(parts)
    if __name__=='__main__':
        print expand('just "a" test',{'a':'one'})

    注:'as'.join(['a','b'])将会连接'a','b',连接使用'as',结果就是'aasb'
    关于list数组的get方法和string的join方法还没弄明白。

    17.替换字符串中的子串
    #-*-coding:utf-8-*-
    import string
    new_style=string.Template('this is $this')
    print new_style.substitute({'this':5})
    print new_style.substitute(this='sadf')      

    18.检查字符串中的结束标记
    #-*-coding:utf-8-*-
    import os
    import itertools
    #----------------------------------------------------------------------
    def anyTrue(predicate,sequence):
        """"""
        return True in itertools.imap(predicate,sequence)
    #----------------------------------------------------------------------
    def endsWith(s,*endings):
        """"""
        return anyTrue(s.endswith,endings)
       
       

    for filename in os.listdir('.'):
        if endsWith(filename,'.jpg','.py'):
            print filename
           

    19.使用unicode来处理国际化文本
    unicodestring=u'Hello world'
    utf8string=unicodestring.encode("utf-8")
    isostring=unicodestring.encode("ISO-8859-1")

  • 相关阅读:
    使用某些 DOCTYPE 时会导致 document.body.scrollTop 失效
    VB.NET 笔记1
    知识管理系统Data Solution研发日记之一 场景设计与需求列出
    知识管理系统Data Solution研发日记之五 网页下载,转换,导入
    折腾了这么多年的.NET开发,也只学会了这么几招 软件开发不是生活的全部,但是好的生活全靠它了
    分享制作精良的知识管理系统 博客园博客备份程序 Site Rebuild
    知识管理系统Data Solution研发日记之四 片段式数据解决方案
    知识管理系统Data Solution研发日记之二 应用程序系列
    知识管理系统Data Solution研发日记之七 源代码与解决方案
    知识管理系统Data Solution研发日记之三 文档解决方案
  • 原文地址:https://www.cnblogs.com/chenjianhong/p/4145076.html
Copyright © 2011-2022 走看看