python中string模块各属性以及函数的用法介绍
任何语言都离不开字符,那就会涉及对字符的操作,尤其是脚本语言更是频繁,不管是生产环境还是面试考验都要面对字符串的操作。
python的字符串操作通过2部分的方法函数基本上就可以解决所有的字符串操作需求:
•python的字符串属性函数
•python的string模块
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.字符串属性函数
系统版本:CentOSrelease6.2(Final)2.6.32-220.el6.x86_64
python版本:Python2.6.6
字符串属性方法
字符串格式输出对齐
>>>str='stRINglEArn'
>>>
>>>str.center(20) #生成20个字符长度,str排中间
' stRINglEArn '
>>>
>>>str.ljust(20) #str左对齐
'stRINglEArn '
>>>
>>>str.rjust(20) #str右对齐
' stRINglEArn'
>>>
>>>str.zfill(20) #str右对齐,左边填充0
'00000000stRINglEArn'
大小写转换
>>>str='stRINglEArn'
>>>
>>>str.upper()#转大写
'STRINGLEARN'
>>>
>>>str.lower()#转小写
'stringlearn'
>>>
>>>str.capitalize()#字符串首为大写,其余小写
'Stringlearn'
>>>
>>>str.swapcase()#大小写对换
'STrinGLeaRN'
>>>
>>>str.title()#以分隔符为标记,首字符为大写,其余为小写
'StringLearn'
字符串条件判断
>>>str='0123' >>>str.isalnum()#是否全是字母和数字,并至少有一个字符 True >>>str.isdigit()#是否全是数字,并至少有一个字符 True >>>str='abcd' >>>str.isalnum() True >>>str.isalpha()#是否全是字母,并至少有一个字符 True >>>str.islower()#是否全是小写,当全是小写和数字一起时候,也判断为True True >>>str='abcd0123' >>>str.islower()#同上 True >>>str.isalnum() True >>>str='' >>>str.isspace()#是否全是空白字符,并至少有一个字符 True >>>str='ABC' >>>str.isupper()#是否全是大写,当全是大写和数字一起时候,也判断为True True >>>str='AbbAcc' >>>str.istitle()#所有单词字首都是大写,标题 True >>>str='stringlearn' >>>str.startswith('str')#判断字符串以'str'开头 True >>>str.endswith('arn')#判读字符串以'arn'结尾 True
字符串搜索定位与替换
>>>str='stringlEARn' >>> >>>str.find('a')#查找字符串,没有则返回-1,有则返回查到到第一个匹配的索引 -1 >>>str.find('n') 4 >>>str.rfind('n')#同上,只是返回的索引是最后一次匹配的 11 >>> >>>str.index('a')#如果没有匹配则报错 Traceback(mostrecentcalllast): File"<stdin>",line1,in<module> ValueError:substringnotfound >>>str.index('n')#同find类似,返回第一次匹配的索引值 4 >>>str.rindex('n')#返回最后一次匹配的索引值 11 >>> >>>str.count('a')#字符串中匹配的次数 0 >>>str.count('n')#同上 2 >>> >>>str.replace('EAR','ear')#匹配替换 'stringlearn' >>>str.replace('n','N') 'striNglEARN' >>>str.replace('n','N',1) 'striNglEARn' >>> >>> >>>str.strip('n')#删除字符串首尾匹配的字符,通常用于默认删除回车符 'stringlEAR' >>>str.lstrip('n')#左匹配 'stringlEARn' >>>str.rstrip('n')#右匹配 'stringlEAR' >>> >>>str='tab' >>>str.expandtabs()#把制表符转为空格 'tab' >>>str.expandtabs(2)#指定空格数 'tab'
字符串编码与解码
>>>str='字符串学习' >>>str 'xe5xadx97xe7xacxa6xe4xb8xb2xe5xadxa6xe4xb9xa0' >>> >>>str.decode('utf-8')#解码过程,将utf-8解码为unicode u'u5b57u7b26u4e32u5b66u4e60' >>>str.decode('utf-8').encode('gbk')#编码过程,将unicode编码为gbk 'xd7xd6xb7xfbxb4xaexd1xa7xcfxb0' >>>str.decode('utf-8').encode('utf-8')#将unicode编码为utf-8 'xe5xadx97xe7xacxa6xe4xb8xb2xe5xadxa6xe4xb9xa0'
字符串分割变换
>>>str='Learnstring' >>>'-'.join(str) 'L-e-a-r-n--s-t-r-i-n-g' >>>l1=['Learn','string'] >>>'-'.join(l1) 'Learn-string' >>> >>>str.split('n') ['Lear','stri','g'] >>>str.split('n',1) ['Lear','string'] >>>str.rsplit('n',1) ['Learnstri','g'] >>> >>>str.splitlines() ['Learnstring'] >>> >>>str.partition('n') ('Lear','n','string') >>>str.rpartition('n') ('Learnstri','n','g')
string模块源代码
"""Acollectionofstringoperations(mostarenolongerused).
Warning:mostofthecodeyouseehereisn'tnormallyusednowadays.
BeginningwithPython1.6,manyofthesefunctionsareimplementedas
methodsonthestandardstringobject.Theyusedtobeimplementedby
abuilt-inmodulecalledstrop,butstropisnowobsoleteitself.
Publicmodulevariables:
whitespace--astringcontainingallcharactersconsideredwhitespace
lowercase--astringcontainingallcharactersconsideredlowercaseletters
uppercase--astringcontainingallcharactersconsidereduppercaseletters
letters--astringcontainingallcharactersconsideredletters
digits--astringcontainingallcharactersconsidereddecimaldigits
hexdigits--astringcontainingallcharactersconsideredhexadecimaldigits
octdigits--astringcontainingallcharactersconsideredoctaldigits
punctuation--astringcontainingallcharactersconsideredpunctuation
printable--astringcontainingallcharactersconsideredprintable
"""
#Somestringsforctype-stylecharacterclassification
whitespace='tnrvf'
lowercase='abcdefghijklmnopqrstuvwxyz'
uppercase='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
letters=lowercase+uppercase
ascii_lowercase=lowercase
ascii_uppercase=uppercase
ascii_letters=ascii_lowercase+ascii_uppercase
digits='0123456789'
hexdigits=digits+'abcdef'+'ABCDEF'
octdigits='01234567'
punctuation="""!"#$%&'()*+,-./:;<=>?@[]^_`{|}~"""
printable=digits+letters+punctuation+whitespace
#Caseconversionhelpers
#UsestrtoconvertUnicodeliteralincaseof-U
l=map(chr,xrange(256))
_idmap=str('').join(l)
dell
#Functionswhicharen'tavailableasstringmethods.
#Capitalizethewordsinastring,e.g."aBcdEf"->"AbcDef".
defcapwords(s,sep=None):
"""capwords(s[,sep])->string
Splittheargumentintowordsusingsplit,capitalizeeach
wordusingcapitalize,andjointhecapitalizedwordsusing
join.IftheoptionalsecondargumentsepisabsentorNone,
runsofwhitespacecharactersarereplacedbyasinglespace
andleadingandtrailingwhitespaceareremoved,otherwise
sepisusedtosplitandjointhewords.
"""
return(sepor'').join(x.capitalize()forxins.split(sep))
#Constructatranslationstring
_idmapL=None
defmaketrans(fromstr,tostr):
"""maketrans(frm,to)->string
Returnatranslationtable(astringof256byteslong)
suitableforuseinstring.translate.Thestringsfrmandto
mustbeofthesamelength.
"""
iflen(fromstr)!=len(tostr):
raiseValueError,"maketransargumentsmusthavesamelength"
global_idmapL
ifnot_idmapL:
_idmapL=list(_idmap)
L=_idmapL[:]
fromstr=map(ord,fromstr)
foriinrange(len(fromstr)):
L[fromstr[i]]=tostr[i]
return''.join(L)
####################################################################
importreas_re
class_multimap:
"""Helperclassforcombiningmultiplemappings.
Usedby.{safe_,}substitute()tocombinethemappingandkeyword
arguments.
"""
def__init__(self,primary,secondary):
self._primary=primary
self._secondary=secondary
def__getitem__(self,key):
try:
returnself._primary[key]
exceptKeyError:
returnself._secondary[key]
class_TemplateMetaclass(type):
pattern=r"""
%(delim)s(?:
(?P<escaped>%(delim)s)|#Escapesequenceoftwodelimiters
(?P<named>%(id)s)|#delimiterandaPythonidentifier
{(?P<braced>%(id)s)}|#delimiterandabracedidentifier
(?P<invalid>)#Otherill-formeddelimiterexprs
)
"""
def__init__(cls,name,bases,dct):
super(_TemplateMetaclass,cls).__init__(name,bases,dct)
if'pattern'indct:
pattern=cls.pattern
else:
pattern=_TemplateMetaclass.pattern%{
'delim':_re.escape(cls.delimiter),
'id':cls.idpattern,
}
cls.pattern=_re.compile(pattern,_re.IGNORECASE|_re.VERBOSE)
classTemplate:
"""Astringclassforsupporting$-substitutions."""
__metaclass__=_TemplateMetaclass
delimiter='$'
idpattern=r'[_a-z][_a-z0-9]*'
def__init__(self,template):
self.template=template
#Searchfor$$,$identifier,${identifier},andanybare$'s
def_invalid(self,mo):
i=mo.start('invalid')
lines=self.template[:i].splitlines(True)
ifnotlines:
colno=1
lineno=1
else:
colno=i-len(''.join(lines[:-1]))
lineno=len(lines)
raiseValueError('Invalidplaceholderinstring:line%d,col%d'%
(lineno,colno))
defsubstitute(self,*args,**kws):
iflen(args)>1:
raiseTypeError('Toomanypositionalarguments')
ifnotargs:
mapping=kws
elifkws:
mapping=_multimap(kws,args[0])
else:
mapping=args[0]
#Helperfunctionfor.sub()
defconvert(mo):
#Checkthemostcommonpathfirst.
named=mo.group('named')ormo.group('braced')
ifnamedisnotNone:
val=mapping[named]
#Weusethisidiominsteadofstr()becausethelatterwill
#failifvalisaUnicodecontainingnon-ASCIIcharacters.
return'%s'%(val,)
ifmo.group('escaped')isnotNone:
returnself.delimiter
ifmo.group('invalid')isnotNone:
self._invalid(mo)
raiseValueError('Unrecognizednamedgroupinpattern',
self.pattern)
returnself.pattern.sub(convert,self.template)
defsafe_substitute(self,*args,**kws):
iflen(args)>1:
raiseTypeError('Toomanypositionalarguments')
ifnotargs:
mapping=kws
elifkws:
mapping=_multimap(kws,args[0])
else:
mapping=args[0]
#Helperfunctionfor.sub()
defconvert(mo):
named=mo.group('named')
ifnamedisnotNone:
try:
#Weusethisidiominsteadofstr()becausethelatter
#willfailifvalisaUnicodecontainingnon-ASCII
return'%s'%(mapping[named],)
exceptKeyError:
returnself.delimiter+named
braced=mo.group('braced')
ifbracedisnotNone:
try:
return'%s'%(mapping[braced],)
exceptKeyError:
returnself.delimiter+'{'+braced+'}'
ifmo.group('escaped')isnotNone:
returnself.delimiter
ifmo.group('invalid')isnotNone:
returnself.delimiter
raiseValueError('Unrecognizednamedgroupinpattern',
self.pattern)
returnself.pattern.sub(convert,self.template)
####################################################################
#NOTE:Everythingbelowhereisdeprecated.Usestringmethodsinstead.
#ThisstuffwillgoawayinPython3.0.
#Backwardcompatiblenamesforexceptions
index_error=ValueError
atoi_error=ValueError
atof_error=ValueError
atol_error=ValueError
#convertUPPERCASEletterstolowercase
deflower(s):
"""lower(s)->string
Returnacopyofthestringsconvertedtolowercase.
"""
returns.lower()
#ConvertlowercaseletterstoUPPERCASE
defupper(s):
"""upper(s)->string
Returnacopyofthestringsconvertedtouppercase.
"""
returns.upper()
#SwaplowercaselettersandUPPERCASE
defswapcase(s):
"""swapcase(s)->string
Returnacopyofthestringswithuppercasecharacters
convertedtolowercaseandviceversa.
"""
returns.swapcase()
#Stripleadingandtrailingtabsandspaces
defstrip(s,chars=None):
"""strip(s[,chars])->string
Returnacopyofthestringswithleadingandtrailing
whitespaceremoved.
IfcharsisgivenandnotNone,removecharactersincharsinstead.
Ifcharsisunicode,Swillbeconvertedtounicodebeforestripping.
"""
returns.strip(chars)
#Stripleadingtabsandspaces
deflstrip(s,chars=None):
"""lstrip(s[,chars])->string
Returnacopyofthestringswithleadingwhitespaceremoved.
IfcharsisgivenandnotNone,removecharactersincharsinstead.
"""
returns.lstrip(chars)
#Striptrailingtabsandspaces
defrstrip(s,chars=None):
"""rstrip(s[,chars])->string
Returnacopyofthestringswithtrailingwhitespaceremoved.
IfcharsisgivenandnotNone,removecharactersincharsinstead.
"""
returns.rstrip(chars)
#Splitastringintoalistofspace/tab-separatedwords
defsplit(s,sep=None,maxsplit=-1):
"""split(s[,sep[,maxsplit]])->listofstrings
Returnalistofthewordsinthestrings,usingsepasthe
delimiterstring.Ifmaxsplitisgiven,splitsatnomorethan
maxsplitplaces(resultinginatmostmaxsplit+1words).Ifsep
isnotspecifiedorisNone,anywhitespacestringisaseparator.
(splitandsplitfieldsaresynonymous)
"""
returns.split(sep,maxsplit)
splitfields=split
#Splitastringintoalistofspace/tab-separatedwords
defrsplit(s,sep=None,maxsplit=-1):
"""rsplit(s[,sep[,maxsplit]])->listofstrings
Returnalistofthewordsinthestrings,usingsepasthe
delimiterstring,startingattheendofthestringandworking
tothefront.Ifmaxsplitisgiven,atmostmaxsplitsplitsare
done.IfsepisnotspecifiedorisNone,anywhitespacestring
isaseparator.
"""
returns.rsplit(sep,maxsplit)
#Joinfieldswithoptionalseparator
defjoin(words,sep=''):
"""join(list[,sep])->string
Returnastringcomposedofthewordsinlist,with
interveningoccurrencesofsep.Thedefaultseparatorisa
singlespace.
(joinfieldsandjoinaresynonymous)
"""
returnsep.join(words)
joinfields=join
#Findsubstring,raiseexceptionifnotfound
defindex(s,*args):
"""index(s,sub[,start[,end]])->int
LikefindbutraisesValueErrorwhenthesubstringisnotfound.
"""
returns.index(*args)
#Findlastsubstring,raiseexceptionifnotfound
defrindex(s,*args):
"""rindex(s,sub[,start[,end]])->int
LikerfindbutraisesValueErrorwhenthesubstringisnotfound.
"""
returns.rindex(*args)
#Countnon-overlappingoccurrencesofsubstring
defcount(s,*args):
"""count(s,sub[,start[,end]])->int
Returnthenumberofoccurrencesofsubstringsubinstring
s[start:end].Optionalargumentsstartandendare
interpretedasinslicenotation.
"""
returns.count(*args)
#Findsubstring,return-1ifnotfound
deffind(s,*args):
"""find(s,sub[,start[,end]])->in
Returnthelowestindexinswheresubstringsubisfound,
suchthatsubiscontainedwithins[start,end].Optional
argumentsstartandendareinterpretedasinslicenotation.
Return-1onfailure.
"""
returns.find(*args)
#Findlastsubstring,return-1ifnotfound
defrfind(s,*args):
"""rfind(s,sub[,start[,end]])->int
Returnthehighestindexinswheresubstringsubisfound,
suchthatsubiscontainedwithins[start,end].Optional
argumentsstartandendareinterpretedasinslicenotation.
Return-1onfailure.
"""
returns.rfind(*args)
#forabitofspeed
_float=float
_int=int
_long=long
#Convertstringtofloat
defatof(s):
"""atof(s)->float
Returnthefloatingpointnumberrepresentedbythestrings.
"""
return_float(s)
#Convertstringtointeger
defatoi(s,base=10):
"""atoi(s[,base])->int
Returntheintegerrepresentedbythestringsinthegiven
base,whichdefaultsto10.Thestringsmustconsistofone
ormoredigits,possiblyprecededbyasign.Ifbaseis0,it
ischosenfromtheleadingcharactersofs,0foroctal,0xor
0Xforhexadecimal.Ifbaseis16,apreceding0xor0Xis
accepted.
"""
return_int(s,base)
#Convertstringtolonginteger
defatol(s,base=10):
"""atol(s[,base])->long
Returnthelongintegerrepresentedbythestringsinthe
givenbase,whichdefaultsto10.Thestringsmustconsist
ofoneormoredigits,possiblyprecededbyasign.Ifbase
is0,itischosenfromtheleadingcharactersofs,0for
octal,0xor0Xforhexadecimal.Ifbaseis16,apreceding
0xor0Xisaccepted.AtrailingLorlisnotaccepted,
unlessbaseis0.
"""
return_long(s,base)
#Left-justifyastring
defljust(s,width,*args):
"""ljust(s,width[,fillchar])->string
Returnaleft-justifiedversionofs,inafieldofthe
specifiedwidth,paddedwithspacesasneeded.Thestringis
nevertruncated.Ifspecifiedthefillcharisusedinsteadofspaces.
"""
returns.ljust(width,*args)
#Right-justifyastring
defrjust(s,width,*args):
"""rjust(s,width[,fillchar])->string
Returnaright-justifiedversionofs,inafieldofthe
specifiedwidth,paddedwithspacesasneeded.Thestringis
nevertruncated.Ifspecifiedthefillcharisusedinsteadofspaces.
"""
returns.rjust(width,*args)
#Centerastring
defcenter(s,width,*args):
"""center(s,width[,fillchar])->string
Returnacenterversionofs,inafieldofthespecified
width.paddedwithspacesasneeded.Thestringisnever
truncated.Ifspecifiedthefillcharisusedinsteadofspaces.
"""
returns.center(width,*args)
#Zero-fillanumber,e.g.,(12,3)-->'012'and(-3,3)-->'-03'
#Decadentfeature:theargumentmaybeastringoranumber
#(Useofthisisdeprecated;itshouldbeastringaswithljustc.s.)
defzfill(x,width):
"""zfill(x,width)->string
Padanumericstringxwithzerosontheleft,tofillafield
ofthespecifiedwidth.Thestringxisnevertruncated.
"""
ifnotisinstance(x,basestring):
x=repr(x)
returnx.zfill(width)
#Expandtabsinastring.
#Doesn'ttakenon-printingcharsintoaccount,butdoesunderstandn.
defexpandtabs(s,tabsize=8):
"""expandtabs(s[,tabsize])->string
Returnacopyofthestringswithalltabcharactersreplaced
bytheappropriatenumberofspaces,dependingonthecurrent
column,andthetabsize(default8).
"""
returns.expandtabs(tabsize)
#Charactertranslationthroughlook-uptable.
deftranslate(s,table,deletions=""):
"""translate(s,table[,deletions])->string
Returnacopyofthestrings,whereallcharactersoccurring
intheoptionalargumentdeletionsareremoved,andthe
remainingcharactershavebeenmappedthroughthegiven
translationtable,whichmustbeastringoflength256.The
deletionsargumentisnotallowedforUnicodestrings.
"""
ifdeletionsortableisNone:
returns.translate(table,deletions)
else:
#Adds[:0]sothatifsisUnicodeandtableisan8-bitstring,
#tableisconvertedtoUnicode.Thismeansthattable*cannot*
#beadictionary--forthatfeature,useu.translate()directly.
returns.translate(table+s[:0])
#Capitalizeastring,e.g."aBcdEf"->"Abcdef".
defcapitalize(s):
"""capitalize(s)->string
Returnacopyofthestringswithonlyitsfirstcharacter
capitalized.
"""
returns.capitalize()
#Substringreplacement(global)
defreplace(s,old,new,maxsplit=-1):
"""replace(str,old,new[,maxsplit])->string
Returnacopyofstringstrwithalloccurrencesofsubstring
oldreplacedbynew.Iftheoptionalargumentmaxsplitis
given,onlythefirstmaxsplitoccurrencesarereplaced.
"""
returns.replace(old,new,maxsplit)
#Tryimportingoptionalbuilt-inmodule"strop"--ifitexists,
#itredefinessomestringoperationsthatare100-1000timesfaster.
#Italsodefinesvaluesforwhitespace,lowercaseanduppercase
#thatmatch<ctype.h>'sdefinitions.
try:
fromstropimportmaketrans,lowercase,uppercase,whitespace
letters=lowercase+uppercase
exceptImportError:
pass#Usetheoriginalversions
########################################################################
#theFormatterclass
#seePEP3101fordetailsandpurposeofthisclass
#ThehardpartsarereusedfromtheCimplementation.They'reexposedas"_"
#prefixedmethodsofstrandunicode.
#Theoverallparserisimplementedinstr._formatter_parser.
#Thefieldnameparserisimplementedinstr._formatter_field_name_split
classFormatter(object):
defformat(self,format_string,*args,**kwargs):
returnself.vformat(format_string,args,kwargs)
defvformat(self,format_string,args,kwargs):
used_args=set()
result=self._vformat(format_string,args,kwargs,used_args,2)
self.check_unused_args(used_args,args,kwargs)
returnresult
def_vformat(self,format_string,args,kwargs,used_args,recursion_depth):
ifrecursion_depth<0:
raiseValueError('Maxstringrecursionexceeded')
result=[]
forliteral_text,field_name,format_spec,conversionin
self.parse(format_string):
#outputtheliteraltext
ifliteral_text:
result.append(literal_text)
#ifthere'safield,outputit
iffield_nameisnotNone:
#thisissomemarkup,findtheobjectanddo
#theformatting
#giventhefield_name,findtheobjectitreferences
#andtheargumentitcamefrom
obj,arg_used=self.get_field(field_name,args,kwargs)
used_args.add(arg_used)
#doanyconversionontheresultingobject
obj=self.convert_field(obj,conversion)
#expandtheformatspec,ifneeded
format_spec=self._vformat(format_spec,args,kwargs,
used_args,recursion_depth-1)
#formattheobjectandappendtotheresult
result.append(self.format_field(obj,format_spec))
return''.join(result)
defget_value(self,key,args,kwargs):
ifisinstance(key,(int,long)):
returnargs[key]
else:
returnkwargs[key]
defcheck_unused_args(self,used_args,args,kwargs):
pass
defformat_field(self,value,format_spec):
returnformat(value,format_spec)
defconvert_field(self,value,conversion):
#doanyconversionontheresultingobject
ifconversion=='r':
returnrepr(value)
elifconversion=='s':
returnstr(value)
elifconversionisNone:
returnvalue
raiseValueError("Unknownconverionspecifier{0!s}".format(conversion))
#returnsaniterablethatcontainstuplesoftheform:
#(literal_text,field_name,format_spec,conversion)
#literal_textcanbezerolength
#field_namecanbeNone,inwhichcasethere'sno
#objecttoformatandoutput
#iffield_nameisnotNone,itislookedup,formatted
#withformat_specandconversionandthenused
defparse(self,format_string):
returnformat_string._formatter_parser()
#givenafield_name,findtheobjectitreferences.
#field_name:thefieldbeinglookedup,e.g."0.name"
#or"lookup[3]"
#used_args:asetofwhichargshavebeenused
#args,kwargs:aspassedintovformat
defget_field(self,field_name,args,kwargs):
first,rest=field_name._formatter_field_name_split()
obj=self.get_value(first,args,kwargs)
#loopthroughtherestofthefield_name,doing
#getattrorgetitemasneeded
foris_attr,iinrest:
ifis_attr:
obj=getattr(obj,i)
else:
obj=obj[i]
returnobj,first
以上这篇python中string模块各属性以及函数的用法介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。