在本博客 《Python字符串系列》 中,将介绍以下内容:

  1. Python内置的str对象及操作
  2. 字符串的格式化
  3. Python中的正则表达式
  4. re模块

  本文将介绍Python内置的 str 类型,列举Python中字符串对象支持的方法,使用这些方法可以实现强大的字符串处理功能。

  在Python 2 中,普通字符串与Unicode字符串有着明确的区分,二者都是Python内置的基本类型,例如:

>>> type(str)
<type 'type'>
>>> type(unicode)
<type 'type'>

  str 类型的字符串通常被称为普通字符串(plain string),区别于 unicode 类型的字符串(unicode string):

>>> s = 'this is a plain string.'
>>> type(s)
<type 'str'>
>>> u = u'this is a unicode string.'
>>> type(u)
<type 'unicode'>

  unicode字符串通常以 'u' 开头。

  在Python 2中,使用 抽象基类 basestring 判断一个字符串是不是 str 类型或者 unicode 类型的实例,因为二者都是 basestring 的子类。

>>> issubclass(str, basestring)
True
>>> issubclass(unicode, basestring)
True
>>> issubclass(unicode, str)
False

  本文将介绍Python字符串的内置方法,这些方法对于 plain string 和 unicode 字符串同样适用,如果执行操作的s是一个plain string,那么返回的字符串也是一个plain string,unicode类似。后续的文章将详细分析 unicode 字符串的特性及编码上的一些特点。

  Python中,字符串是不可变的序列,支持:重复、连接、索引和切片等操作,例如:

>>> s * n    # 将 s 重复n次
>>> s1 + s2 # 将字符串 s1 和 s2 连接
>>> s[0] # 索引字符串 s1 中的第一个字符
>>> s[0:2] # 返回字符串 s 中的前两个字符

  这些操作都不会改变参与运算的字符串,除非进行显式地赋值。此外,Python还包括了许多字符串处理的小技巧,如:

  • 使用s[::-1]可以翻转整个字符串
  • 如果一个字符串全部由数字组成,而开头有0,则使用 int(s) 能够自动除去开头的0,将原来的字符串转成一个有意义的整数。

  

Python内置了丰富的字符串处理功能

1. 首字母大写

capitalize()

s.capitalize()

  返回s的一份拷贝,并不改变s。如果 s 的首字符是一个字母,则拷贝的首字母将其改成大写,其余所有字母转成小写。

例如:

>>> 'this is a test string.'.capitalize()
'This is a test string.'
>>> '_this is a test string.'.capitalize()# 开头不是字母,不变
'_this is a test string.'
>>> 'this is A test string.'.capitalize()# 除开头外的其他位置上的字母全转成小写
'This is a test string.'

  

2. 对齐方式

(1)左右对齐  ljust()、rjust()

s.ljust(width[, fillchar])
s.rjust(width[, fillchar])

  返回一个长度为 max(len(s), width) 的字符串,如果 width > len(s),则左/右对齐,并在另一端填充 fillchar

例如:

>>> '1234'.rjust(8, '#')
'####1234'
>>> '1234'.ljust(8, '#')
'1234####'
>>> '1234'.ljust(2, '#')
'1234'

(2)居中  center()

s.center(n, fillchar=' ')

  返回一个新的字符串,新字符串的长度为 max(len(s), n),当 n > len(s)时,使用参数 fillchar (默认为空格)填充新字符串中其余的位置,并将 s 置于新字符串的中部。

例如:

>>> 'test'.center(3)
'test'
>>> 'test'.center(5)
' test'
>>> 'test'.center(6, '#')
'#test#'
>>> 'test'.center(7, '~')
'~~test~'

  可见当左右无法均衡填充时,优先填充左侧。

3. 计数

count()

s.count(sub, start=0, end=sys.maxint)

  统计 s[start:end] 中,子串 sub 出现的次数。

4. str 与 unicode 的转换

(1)str到unicode——decode()

S.decode([encoding[,errors]])

  使用 decode() 函数可以将 str 类型的plain string 转换成 unicode 类型的字符串,

例如:

>>> s = '你好'
>>> u = s.decode('gbk')
>>> type(s)
<type 'str'>
>>> type(u)
<type 'unicode'>
>>> print s
你好
>>> print u
你好
>>> s
'\xc4\xe3\xba\xc3'
>>> u
u'\u4f60\u597d'
>>> len(s)
4
>>> len(u)
2

  

(2)Unicode 到 str——encode()

S.encode([encoding[,errors]])

  使用encode()则可以将 unicode 字符串 转换成 str 类型的 plain string。

例如:

>>> u = u'你好'
>>> s = u.encode('gbk')
>>> type(u)
<type 'unicode'>
>>> type(s)
<type 'str'>
>>> u
u'\u4f60\u597d'
>>> s
'\xc4\xe3\xba\xc3'
>>> print u
你好
>>> print s
你好
>>> len(u)
2
>>> len(s)
4

5. 前后缀

endswith()、startswith()

S.endswith(suffix[, start[, end]])
s.startswith(prefix[, start[, end]])

  返回 bool 型结果,

  判断 s[start:end]是否以 suffix 结尾。

6. 扩展制表符

expandtabs()

S.expandtabs([tabsize])

  tabsize默认为8,返回一个 s 的拷贝,其中的“\t”都被扩展成 tabsize 个空格。

例如:

>>> 'test\ttest'.expandtabs()
'test test'

  

7. 定位

(1)定位不到时返回 -1  find()、rfind()

s.find(sub [,start [,end]])
s.rfind(sub [,start [,end]])

  返回 int 型结果,表示 sub 在 s[start:end] 中第一次出现的下标。如果在 s[start:end] 中没有找到子串 sub,则返回 -1。

例如:

>>> 'testtest'.find('est')
1
>>> 'testtest'.find('tt')
3
>>> 'testtest'.find('tt',3)
3
>>> 'testtest'.find('tt',4)
-1

 

(2)定位不到时抛出异常  index()、rindex()

S.index(sub [,start [,end]])
s.rindex(sub [,start [,end]])

  功能与 find() 类似,但是如果没有找到 sub ,则抛出 ValueError。

例如:

>>> 'hello this world'.index('$')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found

  

8.

format()

S.format(*args, **kwargs)

  返回 字符串 型结果,

9. 内容形式判断

isalnum()、isalpha()、isdigit()、isspace()

s.isalnum()

  返回布尔型结果,

  判断 s 是不是非空,且全部由 字母 和 数字 组成。

s.isalpha()

  返回布尔型结果,

  判断 s 是不是非空,且全部由 字母 组成。

s.isdigit()

  返回布尔型结果,

  判断 s 是不是非空,且全部由 数字 字符组成。

例如:

>>> '123'.isdigit()
True
>>> '123.456'.isdigit()
False

  

s.isspace()

  如果 len(s) > 0,且其中的所有字符都是空格,则返回True;

  如果 s 为空,或s中存在至少一个非空格的字符,则返回False。

10. 大小写

(1)小写  islower()、lower()

s.islower()
s.lower()

  返回布尔型结果,

  如果 s 中不含一个小写字母,或至少含有一个大写字母,则返回False,否则返回True,包含其他字符并不影响。

例如:

>>> '123.456'.islower()
False
>>> 'abcde'.islower()
True
>>> 'abcde$'.islower()
True
>>> 'abcde#%^%'.islower()
True
>>> 'abcdeF'.islower()
False
>>> 'a.213214$#@^%$@'.islower()
True

(2)大写  isupper()、upper()

s.isupper()
s.upper()

  如果 s 中包含的所有字母都是大写,则返回 True

  如果s 中不包含字母,或者至少包含一个小写字母,则返回False。

例:

>>> 'ABC$@'.isupper()
True
>>> 'ASDFGq'.isupper()
False
>>> ''.isupper()
False

  

(3)交换大小写  swapcase()

s.swapcase()

  

11. "titlecase"

istitle()title()

s.istitle()
s.title()

  判断一个字符串是不是“titlecase”:每个独立的连续字母段都以大写字母开头。

例如:

>>> 'A Title'.istitle()
True
>>> 'a Title'.istitle()
False
>>> '123 this is a string'.istitle()
False
>>> 'This Is a String'.istitle()
False

  

12. 连接

join()

s.join(iterable)

  以 s 为分隔符连接 iterable 中的字符串

例如:

>>> '$'.join(['hello','this','world'])
'hello$this$world'

  

13. 拆分

(1)保留分隔符的一次拆分  partition()rpartition()

s.partition(sep)
s.rpartition(sep)

  以 sep 为分隔符拆分 s ,返回 (head, sep, tail) 形式的三元组。

例如:

>>> 'hello$this$world'.partition('$')
('hello', '$', 'this$world')
>>> 'hello$this$world'.rpartition('$')
('hello$this', '$', 'world')
>>> 'hello this world'.partition('$')
('', '', 'hello this world')

  

(2)不保留分隔符的完全拆分  split()rsplit()splitlines()

s.split([chars])
s.rsplit([sep [,maxsplit]])
s.splitlines(keepends=False)

例如:

>>> 'hello$this$world'.split('$')
['hello', 'this', 'world']

  

14. 

lstrip()、strip()rstrip()

s.lstrip([chars]) #从开头删除
s.strip([chars]) # 左右两端同时删除
s.rstrip([chars]) # 从结尾删除

  

16. 替换

replace()

s.replace(old, new[, count])

18.

translate()

s.translate(table [,deletechars])

  

19.
zfill()
s.zfill(width)

  

(原创)Python字符串系列(1)——str对象的更多相关文章

  1. Python坑系列:可变对象与不可变对象

    在之前的文章 http://www.cnblogs.com/bitpeng/p/4748148.html 中,大家看到了ret.append(path) 和ret.append(path[:])的巨大 ...

  2. python编程系列---可迭代对象,迭代器和生成器详解

    一.三者在代码上的特征 1.有__iter__方法的对象就是可迭代类(对象) 2.有__iter__方法,__next()方法的对象就是迭代器3.生成器 == 函数+yield 生成器属于迭代器, 迭 ...

  3. Python字符串(Str)详解

    字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可 字符串的格式 b = "hello itcast. ...

  4. 【python基础】之str类字符串

    str类字符串是不可变对象 1.创建字符串 s1 = str() #创建一个空字符串 s2 = str("hello") #创建字符串"hello" 2.处理字 ...

  5. Python基础系列----序列(列表、元组、字符串)

    1.定义                                                                                               1 ...

  6. Python 字符串 (str)

    作者博文地址:https://www.cnblogs.com/liu-shuai/ Python字符串的常用操作包括以下但不限于以下操作: 1 字符串的替换.删除.切片.复制.连接.比较.查找.分割等 ...

  7. 《python解释器源码剖析》第3章--python中的str对象

    3.0 序 我们知道python中的字符串属于变长对象,当然和int也是一样,底层的结构体实例所维护的数据的长度,在对象没有定义的时候是不知道的.当然如果是python2的话,底层PyIntObjec ...

  8. python 测试时一个str是不是字符串

    # -*- coding: cp936 -*- #python 27 #xiaodeng #测试时一个str是不是字符串 def isAstring(obj): ''' 测试一个str是不是字符串 b ...

  9. python字符串、列表和文件对象总结

    1.字符串是字符序列.字符串文字可以用单引号或者双引号分隔. 2.可以用内置的序列操作来处理字符串和列表:连接(+).重复(*).索引([]),切片([:])和长度(len()).可以用for循环遍历 ...

随机推荐

  1. 关于session的小结

    session的原理 Session对象的原理在于,服务器可以为客户端创建并维护一个所谓的Session对象,用于存放数据. 在创建Session对象的同时,服务器将会为该Session对象产生一个唯 ...

  2. samsung Galaxy s2(GT i9100g )刷机升级至4.4小记

    从昨天上午到现在,大部分时间都是在将i9100g更新到4.4.虽然中途也做了一些别的事情,但是更新过程还是走了一点弯路,比开始预想的稍微慢了一点,现在将完整的更新步骤分享给大家,以帮助后来的同学.升级 ...

  3. Swift 中范围和区间如何使用?

    虽然现在swift语言已经发展到了2.0版了,但是相信很多学习iOS开发的童鞋仍对swift语言存在各种各样的疑问,今天小编将为大家详细介绍swift中的范围和区间,下面我们一起来看看吧. Range ...

  4. 配置 AEM CQ6 (author + publish + apache dispatcher + ubuntu )

      AEM CQ系列是Adobe下的企业内容管理系统,现在已知的一些企业比如 Deloitte,Ford Racing,这里就不多做基本的介绍了,明白的看! 今天在Docker配置一下author i ...

  5. IIS启动出错解决方法

    IIS出现server application error,最终解决办法2007年10月30日 星期二 20:38Server Application Error The server has enc ...

  6. 【Android Developers Training】 81. 解析XML数据

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  7. Java IO(IO流)-2

    IO流 第一部分 (OutputStreamWriter BufferOutputStream) 转换流 超类为Reader和Writer 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流 ...

  8. Asp.net MVC4高级编程学习笔记-模型学习第四课基架与模型绑定20171027

    MVC模型 一.构建基架. MVC中的基架可以为应用程序提供CURD各种功能生成所需要的样板代码.在添加控制器的时候可以选择相应的模板以及实体对象来生成相应的模板代码. 首先定义一个模型类如下所示: ...

  9. Windows Server 2012设置VMWare以服务方式启动(注销后也可以运行,开机也可以自动运行)

    场景:要用一台服务器(Windows Server 2012),加装了一张双口的千兆网卡,安装一个虚拟机,使用爱快在虚拟机里当做软路由. - 那么问题来了,我这台是只能远程的,如果软路由没启动,怎么办 ...

  10. css3 text-shadow字体阴影讲解

    text-shadow:为字体添加阴影, 可以通过对text-shadow属性设置相关的属性值,来实现现一些需要的字体阴影效果,减少了图片的使用. 基础说明:    text-shadow: X轴  ...