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

[经验分享] Python字符串的基本用法总结

[复制链接]

尚未签到

发表于 2018-8-12 08:10:47 | 显示全部楼层 |阅读模式
  字符串序列用于表示和存储文本,python中字符串是不可变对象。通常由单引号(' ),双引号(" ),三引号(''' """)包围,其中三引号可以由多行组成,编写多行文本的快捷语法,常用语文档字符串,在文件的特定地点,被当做注释。便捷的多行注释。
  Python实际三类字符串:
  1.通常意义字符串(str)
  2.原始字符串,以大写R 或 小写r开始,r'',不对特殊字符进行转义
  3.Unicode字符串,u'' basestring子类
  python中字符串支持索引、切片操作。
  (1)一个小技巧
  先来说个小技巧吧,对于怎么编写多行字符串,除了用三个连续的双引号外,还要一个小技巧,看下面代码。
#coding=utf-8  
s = ('select *'
  
     'from atable'
  
     'where id=888')
  
print s
  输出的结果是'select *from atablewhere>python中遇到未闭合的小括号时会自动将多行代码拼接为一行和把相邻的两个字符串字面量拼接到一起。相比使用三个连续的单(双)引号,这种方式不会把换行符和前导空格也当作字符串的一部分。
  注意:上面的例子,s不是元组,需要在后面加逗号才会是元组,如下
#coding=utf-8  
s = ('select *'
  
     'from atable'
  
     'where id=888',)
  
print s,type(s)
  结果如下:

  ('select *from atablewhere>  (2)如何判断一个对象是不是字符串
  python中字符串有两重,一种是str,一种是unicode。那如何判断一个对象是不是字符串呢?应该使用isinstance(s,basestring),而不是isinstance(s,str)。看下面例子
  >>>a = 'hi'
  >>>isinstance(a,str)
  True
  >>>b = u'Hi'
  >>>isinstance(b,str)
  False
  >>>isinstance(b,basestring)
  True
  >>>isinstance(b,unicode)
  True
  >>>isinstance(a,unicode)
  False
  要正确判读一个对象是不是字符串,要有basestring,因为basestring是str和unicode的基类,包含了普通字符串和unicode类型。
  (3)str对象的基本用法
  字符串的基本用法可以分以下五类,即性质判定、查找替换、分切与连接、变形、填空与删减。
  (a)性质判定
  性质判定有以下几个方法。
  isalnum():是否全是字母和数字,并至少有一个字符
  isalpha():是否全是字母,并至少有一个字符
  isdigit():是否全是数字,并至少有一个字符
  islower():字符串中字母是否全是小写
  isupper():字符串中字母是否全是小写
  isspace():是否全是空白字符,并至少有一个字符
  istitle():判断字符串是否每个单词都有且只有第一个字母是大写
  startswith(prefix[,start[,end]]):用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 start 和 end 指定值,则在指定范围内检查。
  endswith(suffix[,start[,end]]):用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False。可选参数"start"与"end"为检索字符串的开始与结束位置。
  is*()这些都比较简单,从字母的字面上就可以理解,*with()函数可以接受start和end参数,如果善加利用可以优化性能。另外,从python 2.5版本起,*with()函数族的第一个参数可接受tuple类型实参,当实参中某个元素匹配时,即返回True。
  (b)查找与替换
  count(sub[,start[,end]]):统计字符串里某个字符sub出现的次数。可选参数为在字符串搜索的开始与结束位置。这个数值在调用replace方法时用得着。
  find(sub[,start[,end]]):检测字符串中是否包含子字符串sub,如果指定start(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1
  index(sub[,start[,end]]):跟find()方法一样,只不过如果sub不在 string中会抛出ValueError异常。
  rfind(sub[,start[,end]]):类似于 find()函数,不过是从右边开始查找。
  rindex(sub[,start[,end]]):类似于 index(),不过是从右边开始。
  replace(old,new[,count]):用来替换字符串的某些子串,用new替换old。如果指定count参数话,就最多替换count次,如果不指定,就全部替换
  前面五个方法都可以接受start、end参数,善加利用可以优化性能。对于查找某个字符串中是否有子串,不推荐使用index族和find族方法,推荐使用in和not in操作
  (c)分切与连接
  partition(sep):用来根据指定的分隔符将字符串进行分割,如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。如果sep没有出现在字符串中,则返回值为(sep,",")。partition() 方法是在2.5版中新增的。
  rpartition(sep):类似于 partition()函数,不过是从右边开始查找.
  splitness([keepends]):按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
  split(sep[,maxsplit]]):通过指定分隔符对字符串进行切片,如果参数maxsplit 有指定值,则仅分隔 maxsplit 个子字符串,返回分割后的字符串列表。
  rsplit(sep[,maxsplit]]):同split(),不过是从右边开始。
  看下面例子
str1 = 'ab c\n\nde fg\rkl\r\n'  
print str1.splitlines();
  

  
str2 = 'ab c\n\nde fg\rkl\r\n'
  
print str2.splitlines(True)
  输出如下:
  ['ab c', '', 'de fg', 'kl']
  ['ab c\n', '\n', 'de fg\r', 'kl\r\n']
  split()函数有个小陷阱,比如对于字符串s,s.split()和s.split(" ")的返回值不同。看下面代码
s = "  hello world"#前面有两个空格  
print s.split()
  
print s.split(' ')
  输出结果如下
  ['hello', 'world']
  ['', '', 'hello', 'world']
  这是为什么呢?原因在于:当忽略sep参数或者sep参数为None时与明确给sep赋予字符串值时,split()采用了两种不同的算法。对于前者,split()先除去两端的空白符,然后以任意长度的空白符串作为界定符分切字符串(即连续空白符串会被单一空白符看待);对于后者则认为两个两个连续空白符之间存在一个空字符串,因此对空字符串,它们的返回值也不同。
  >>>".split()
  []
  >>>''.split(' ')
  ['']
  (d)变形
  lower():转换字符串中所有大写字符为小写。
  upper():将字符串中的小写字母转为大写字母。
  capitalize():将字符串的第一个字母变成大写,其他字母变小写。对于 8 位字节编码需要根据本地环境。
  swapcase():用于对字符串的大小写字母进行转换,大写转小写,小写转大写。
  title():返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写。
  这些都是大小写切换,title()并不能除去字符串两端的空白符也不会把连续空白符替换成一个空格,如果有这样的需求,可以用string模块的capwords(s)函数,它能除去两端空白符,并且能将连续的空白符用一个空格符代替。看下面例子:
#coding=utf-8  
import string
  
s = "   hello   world"
  
print s.title()
  
print string.capwords(s)
  输出结果如下:
  Hello   World
  Hello World
  (e)删减与填充
  strip([chars]):用于移除字符串头尾指定的字符(默认为空格),如果有多个就会删除多个。
  ltrip([chars]):用于截掉字符串左边的空格或指定字符。
  rtrip([chars]):用于截掉字符串右边的空格或指定字符。

  center(width[,fillchar]):返回一个原字符串居中,并使用fillchar填充至长度>  ljust(width[,fillchar]):返回一个原字符串左对齐,并使用fillchar填充至指定长度的新字符串,默认为空格。如果指定的长度小于原字符串的长度则返回原字符串。

  rjust(width[,fillchar]):返回一个原字符串右对齐,并使用fillchar填充至长度>  zfill(width):返回指定长度的字符串,原字符串右对齐,前面填充0
  expandtabs([tabsize]):把字符串中的 tab 符号('\t')转为适当数量的空格,默认情况下是转换为8个。

运维网声明 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-550386-1-1.html 上篇帖子: 学Python大数据处理用Anaconda-Python培训智普教育 下篇帖子: Python Pycharm导入第三方包
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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