注册地址 登录
数学建模社区-数学中国 返回首页

Seawind2012的个人空间 http://www.madio.net/?467508 [收藏] [复制] [分享] [RSS]

日志

python web开发常用字符串处理

已有 735 次阅读2012-5-22 11:13 | web开发, python, 字符串

1 除去空格  

strip([chars]),
lstrip([chars]),

rstrip([chars])

2

具体可以参考  http://gaogaochao1.blog.163.com/blog/static/79810971201011212439971/

 

  在编程中,几乎90% 以上的代码都是关于整数或字符串操作,所以与整数一样,Python 的字符串实现也使用了许多拿优化技术,使得字符串的性能达到极致。与 C++ 标准库(STL)中的 std::string 不同,python 字符串集合了许多字符串相关的算法,以方法成员的方式提供接口,使用起来非常方便。 字符串方法大约有几十个,这些方法可以分为如下几类(根据 manuals 整理):

类型
方法
注解
填充
center(width[, fillchar]) ,
ljust(width[, fillchar]),
rjust(width[, fillchar]),
zfill(width),
expandtabs([tabsize])
l         fillchar 参数指定了用以填充的字符,默认为空格
l         顾名思义,zfill()即是以字符0进行填充,在输出数值时比较常用
l         expandtabs()的tabsize 参数默认为8。它的功能是把字符串中的制表符(tab)转换为适当数量的空格。
删减
strip([chars]),
lstrip([chars]),
rstrip([chars])
*strip()函数族用以去除字符串两端的空白符,空白符由string.whitespace常量定义。
变形
lower(),
upper(),
capitalize(),
swapcase(),
title()
title()函数是比较特别的,它的功能是将每一个单词的首字母大写,并将单词中的非首字母转换为小写(英文文章的标题通常是这种格式)。
>>> 'hello wORld!'.title()
'Hello World!'
因为title() 函数并不去除字符串两端的空白符也不会把连续的空白符替换为一个空格,所以建议使用string 模块中的capwords(s)函数,它能够去除两端的空白符,再将连续的空白符用一个空格代替。
>>> ' hello   world!'.title()
' Hello   World!'
>>> string.capwords(' hello   world!')
'Hello World!'
 
分切
partition(sep),
rpartition(sep),
splitlines([keepends]),
split([sep [,maxsplit]]),
rsplit([sep[,maxsplit]])
l         *partition() 函数族是2.5版本新增的方法。它接受一个字符串参数,并返回一个3个元素的 tuple 对象。如果sep没出现在母串中,返回值是 (sep, ‘’, ‘’);否则,返回值的第一个元素是 sep 左端的部分,第二个元素是 sep 自身,第三个元素是 sep 右端的部分。
l         参数 maxsplit 是分切的次数,即最大的分切次数,所以返回值最多有 maxsplit+1 个元素。
l         s.split() 和 s.split(‘ ‘)的返回值不尽相同
>>> ' hello   world!'.split()
['hello', 'world!']
>>> ' hello   world!'.split(' ')
['', '', 'hello', '', '', 'world!']
产生差异 的原因在于当忽略 sep 参数或sep参数为 None 时与明确给 sep 赋予字符串值时 split() 采用两种不同的算法。对于前者,split() 先去除字符串两端的空白符,然后以任意长度的空白符串作为界定符分切字符串(即连续的空白符串被当作单一的空白符看待);对于后者则认为两个连续的 sep 之间存在一个空字符串。因此对于空字符串(或空白符串),它们的返回值也是不同的:
>>> ''.split()
[]
>>> ''.split(' ')
['']
连接
join(seq)
join() 函数的高效率(相对于循环相加而言),使它成为最值得关注的字符串方法之一。它的功用是将可迭代的字符串序列连接成一条长字符串,如:
>>> conf = {'host':'127.0.0.1',
...     'db':'spam',
...     'user':'sa',
...     'passwd':'eggs'}
>>> ';'.join("%s=%s"%(k, v) for k, v in conf.iteritems())
'passswd=eggs;db=spam;user=sa;host=127.0.0.1'
判定
isalnum(),
isalpha(),
isdigit(),
islower(),
isupper(),
isspace(),
istitle(),
startswith(prefix[, start[, end]]),
endswith(suffix[,start[, end]])
这些函数都比较简单,顾名知义。需要注意的是*with()函数族可以接受可选的 start, end 参数,善加利用,可以优化性能。
另,自 Py2.5 版本起,*with() 函数族的 prefix 参数可以接受 tuple 类型的实参,当实参中的某人元素能够匹配,即返回 True。
查找
count( sub[, start[, end]]),
find( sub[, start[, end]]),
index( sub[, start[, end]]),
rfind( sub[, start[,end]]),
rindex( sub[, start[, end]])
find()函数族找不到时返回-1,index()函数族则抛出ValueError异常
另,也可以用 in 和 not in 操作符来判断字符串中是否存在某个模板。
替换
replace(old, new[,count]),
translate(table[,deletechars])
l         replace()函数的 count 参数用以指定最大替换次数
l         translate() 的参数 table 可以由 string.maketrans(frm, to) 生成
l         translate() 对 unicode 对象的支持并不完备,建议不要使用。
编码
encode([encoding[,errors]]),
decode([encoding[,errors]])
这是一对互逆操作的方法,用以编码和解码字符串。因为str是平台相关的,它使用的内码依赖于操作系统环境,而 unicode是平台无关的,是Python内部的字符串存储方式。unicode可以通过编码(encode)成为特定编码的str,而str也可以通 过解码(decode)成为unicode。

 

附注:

1)C++ 中可以通过 boost.string_algo 库来获得同样方便的字符串处理能力。

2)这些字符串方法在 python1.6 版本才开始提供,如果你使用的python版本非常老,可能需要使用string模块来获得这些方便的算法。 

 

====================================================================

Python-String-Function

字符串中字符大小写的变换:

    * S.lower()   #小写
    * S.upper()   #大写
    * S.swapcase()   #大小写互换
    * S.capitalize()   #首字母大写
    * String.capwords(S) 
      #这是模块中的方法。它把S用split()函数分开,然后用capitalize()把首字母变成大写,最后用join()合并到一起
    * S.title()    #只有首字母大写,其余为小写,模块中没有这个方法

字符串在输出时的对齐:

    * S.ljust(width,[fillchar]) 
      #输出width个字符,S左对齐,不足部分用fillchar填充,默认的为空格。
    * S.rjust(width,[fillchar])    #右对齐
    * S.center(width, [fillchar])    #中间对齐
    * S.zfill(width)   #把S变成width长,并在右对齐,不足部分用0补足

字符串中的搜索和替换:

    * S.find(substr, [start, [end]]) 
      #返回S中出现substr的第一个字母的标号,如果S中没有substr则返回-1。start和end作用就相当于在S[start:end]中搜索
    * S.index(substr, [start, [end]]) 
      #与find()相同,只是在S中没有substr时,会返回一个运行时错误
    * S.rfind(substr, [start, [end]]) 
      #返回S中最后出现的substr的第一个字母的标号,如果S中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号
    * S.rindex(substr, [start, [end]])
    * S.count(substr, [start, [end]])    #计算substr在S中出现的次数
    * S.replace(oldstr, newstr, [count])  
      #把S中的oldstar替换为newstr,count为替换次数。这是替换的通用形式,还有一些函数进行特殊字符的替换
    * S.strip([chars])
      #把S中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None
    * S.lstrip([chars])
    * S.rstrip([chars])
    * S.expandtabs([tabsize]) 
      #把S中的tab字符替换没空格,每个tab替换为tabsize个空格,默认是8个

字符串的分割和组合:

    * S.split([sep, [maxsplit]])
      #以sep为分隔符,把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符
    * S.rsplit([sep, [maxsplit]])
    * S.splitlines([keepends])
      #把S按照行分割符分为一个list,keepends是一个bool值,如果为真每行后而会保留行分割符。
    * S.join(seq) #把seq代表的序列──字符串序列,用S连接起来

字符串的mapping,这一功能包含两个函数:

    * String.maketrans(from, to)
      #返回一个256个字符组成的翻译表,其中from中的字符被一一对应地转换成to,所以from和to必须是等长的。
    * S.translate(table[,deletechars])
      #使用上面的函数产后的翻译表,把S进行翻译,并把deletechars中有的字符删掉。需要注意的是,如果S为unicode字符串,那么就不支持 deletechars参数,可以使用把某个字符翻译为None的方式实现相同的功能。此外还可以使用codecs模块的功能来创建更加功能强大的翻译 表。

字符串还有一对编码和解码的函数:

    * S.encode([encoding,[errors]])
      #其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib big5 bzse64等都支持。errors默认值为"strict",意思是UnicodeError。可能的值还有'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 和所有的通过codecs.register_error注册的值。这一部分内容涉及codecs模块,不是特明白
    * S.decode([encoding,[errors]])

字符串的测试函数,这一类函数在string模块中没有,这些函数返回的都是bool值:

    * S.startwith(prefix[,start[,end]])
      #是否以prefix开头
    * S.endwith(suffix[,start[,end]])
      #以suffix结尾
    * S.isalnum()
      #是否全是字母和数字,并至少有一个字符
    * S.isalpha()  #是否全是字母,并至少有一个字符
    * S.isdigit()  #是否全是数字,并至少有一个字符
    * S.isspace() #是否全是空白字符,并至少有一个字符
    * S.islower() #S中的字母是否全是小写
    * S.isupper() #S中的字母是否便是大写
    * S.istitle() #S是否是首字母大写的

字符串类型转换函数,这几个函数只在string模块中有:

    * string.atoi(s[,base])
      #base默认为10,如果为0,那么s就可以是012或0x23这种形式的字符串,如果是16那么s就只能是0x23或0X12这种形式的字符串
    * string.atol(s[,base])  #转成long
    * string.atof(s[,base])  #转成float

 

引用:http://www.telitchina.com/www/12/2007-07/36.html

 

############################################################

 

2009年10月9号Tech
Pythonstring
python字符串方法

Python-String-Function

字符串中字符大小写的变换:

* S.lower()   #小写
* S.upper()   #大写
* S.swapcase()   #大小写互换
* S.capitalize()   #首字母大写
* String.capwords(S)
#这是模块中的方法。它把S用split()函数分开,然后用capitalize()把首字母变成大写,最后用join()合并到一起
* S.title()    #只有首字母大写,其余为小写,模块中没有这个方法

字符串在输出时的对齐:

* S.ljust(width,[fillchar])
#输出width个字符,S左对齐,不足部分用fillchar填充,默认的为空格。
* S.rjust(width,[fillchar])    #右对齐
* S.center(width, [fillchar])    #中间对齐
* S.zfill(width)   #把S变成width长,并在右对齐,不足部分用0补足

字符串中的搜索和替换:

* S.find(substr, [start, [end]])
#返回S中出现substr的第一个字母的标号,如果S中没有substr则返回-1。start和end作用就相当于在S[start:end]中搜索
* S.index(substr, [start, [end]])
#与find()相同,只是在S中没有substr时,会返回一个运行时错误
* S.rfind(substr, [start, [end]])
#返回S中最后出现的substr的第一个字母的标号,如果S中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号
* S.rindex(substr, [start, [end]])
* S.count(substr, [start, [end]])    #计算substr在S中出现的次数
* S.replace(oldstr, newstr, [count])
#把S中的oldstar替换为newstr,count为替换次数。这是替换的通用形式,还有一些函数进行特殊字符的替换
* S.strip([chars])
#把S中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None
* S.lstrip([chars])
* S.rstrip([chars])
* S.expandtabs([tabsize])
#把S中的tab字符替换没空格,每个tab替换为tabsize个空格,默认是8个

字符串的分割和组合:

* S.split([sep, [maxsplit]])
#以sep为分隔符,把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符
* S.rsplit([sep, [maxsplit]])
* S.splitlines([keepends])
#把S按照行分割符分为一个list,keepends是一个bool值,如果为真每行后而会保留行分割符。
* S.join(seq) #把seq代表的序列──字符串序列,用S连接起来

字符串的mapping,这一功能包含两个函数:

* String.maketrans(from, to)
#返回一个256个字符组成的翻译表,其中from中的字符被一一对应地转换成to,所以from和to必须是等长的。
* S.translate(table[,deletechars])
#使用上面的函数产后的翻译表,把S进行翻译,并把deletechars中有的字符删掉。需要注意的是,如果S为unicode字符串,那么就不支持 deletechars参数,可以使用把某个字符翻译为None的方式实现相同的功能。此外还可以使用codecs模块的功能来创建更加功能强大的翻译 表。

字符串还有一对编码和解码的函数:

* S.encode([encoding,[errors]])
#其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib big5 bzse64等都支持。errors默认值为”strict”,意思是UnicodeError。可能的值还有’ignore’, ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 和所有的通过codecs.register_error注册的值。这一部分内容涉及codecs模块,不是特明白
* S.decode([encoding,[errors]])

字符串的测试函数,这一类函数在string模块中没有,这些函数返回的都是bool值:

* S.startwith(prefix[,start[,end]])
#是否以prefix开头
* S.endwith(suffix[,start[,end]])
#以suffix结尾
* S.isalnum()
#是否全是字母和数字,并至少有一个字符
* S.isalpha() #是否全是字母,并至少有一个字符
* S.isdigit() #是否全是数字,并至少有一个字符
* S.isspace() #是否全是空白字符,并至少有一个字符
* S.islower() #S中的字母是否全是小写
* S.isupper() #S中的字母是否便是大写
* S.istitle() #S是否是首字母大写的

字符串类型转换函数,这几个函数只在string模块中有:

* string.atoi(s[,base])
#base默认为10,如果为0,那么s就可以是012或0×23这种形式的字符串,如果是16那么s就只能是0×23或0X12这种形式的字符串
* string.atol(s[,base]) #转成long
* string.atof(s[,base]) #转成float

1.python字符串通常有单引号(’…’)、双引号(”…”)、三引号(”"”…”"”)或(”’…”’)包围,三引 号包含的字符串可由多行组成,一般可表示大段的叙述性字符串。在使用时基本没有差别,但双引号和三引号(”"”…”"”)中可以包含单引号,三引号 (”’…”’)可以包含双引号,而不需要转义。
2.用(\)对特殊字符转义,如(\)、(’)、(”)。
3.常用字符串内置函数
1)str.count()  //返回该字符串中某个子串出现的次数
2)str.find()   //返回某个子串出现在该字符串的起始位置
3)str.lower()  //将该字符串全部转化为小写
4)str.upper()  //转为大写
5)str.split()  //分割字符串,返回字串串列表,默认以空格分割
6)len(str)     //返回字符串长度
例如:
>>> str = ‘Hello, world’
>>> str.count(‘o’)
>>> 2
>>> str.find(‘lo’)
>>> 3
>>> str.lower()
>>> ‘hello, world’
>>> str.upper()
>>> ‘HELLO, WORLD’
>>> str.split()
>>> ['Hello,', 'world']
>>> str.split(‘,’)
>>> ['Hello', ' world']
>>> len(str)
>>> 13
>>> str
>>> ‘Hello, world’
以上所有操作都不会改变字符串本身!
4.正则表达式,re模块
import re
常用函数:
1)compile():   //将正则表达式字符串编译成正则re对象
2)search()     //在目标字符串中匹配正则表达式
3)match()      //从目标字符串第一个字符开始匹配正则表达
search和match匹配成功返回MatchObject对象,失败返回None
>>> p = re.compile(‘abc’)
>>> p.search(‘zabcy’)
<_sre.SRE_Match object at 0×2a95659030>
不先编译成正则re对象也是可以的,上例也可以为:
>>> re.search(‘abc’,'xabcy’)
<_sre.SRE_Match object at 0×2a95659098>
compile还可加些标志位,例如:re.I(re.IGNORECASE)忽略大小写
>>> p = re.compile(‘abc’)
>>> print p.search(‘xAbCy’)
None
>>> p = re.compile(‘abc’,re.I)
>>> print p.search(‘xAbCy’)
<_sre.SRE_Match object at 0×2a9565a098>
search和match区别见下例:
>>> p = re.compile(‘abc’)
>>> print p.search(‘xxxabcyyy’)
<_sre.SRE_Match object at 0×2a95659030>
>>> print p.match(‘xxxabcyyy’)
None
>>> print p.match(‘abcyyy’)
<_sre.SRE_Match object at 0×2a95659098>
4)split()      //类似字符串内置函数split()
区别在于:内置split()以确定字符串分割,而正则split函数以正则表达式分割字
例如:以空格(1个或者多个空格)分割:

>>> p.split(‘a b   c  d’)
['a', 'b', 'c', 'd']

而内置split分割的结果为:

>>> ‘a b   c  d’.split(‘ ‘)
['a', 'b', '', '', 'c', '', 'd']

5)findall()     //返回目标字符串中匹配正则表达式中所有子串列表
>>> p = re.compile(‘^([a-z]{2}):([1-9]{3}):(.+)$’)
>>> p.findall(‘as:123:a12′)
[('as', '123', 'a12')]

上例中正则表达式的子串为3个用括弧括起的,分别为:’[a-z]{2}’、’[1-9]{3}’、’.+’, 分别被as、123、a12匹配,注意此返回的是匹配字符串元组的一维列表。

以上比较常用的正则函数,更多用法请参照python手册。
5.字符串与数字相互转换,string模块
import string
string.atoi(str[,base])  //base为可选参数,表示将字符转换成的进制类型
数字转换成字符串可简单了,直接用str()
6.字符与ASCII转换
char->ascii ord()
ascii->char  chr()




















 







 

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2025-9-22 08:00 , Processed in 0.235376 second(s), 27 queries .

回顶部