字符串是零个或多个的字符所组成的序列,字符串是Python内建的6种序列之一,在Python中字符串是不可变的。

1. 格式化字符串

字符串格式化使用字符串格式化操作符即百分号%来实现。在%左侧放置一个字符串(格式化字符串),而右侧则放置希望格式化的值(可以是元组或字典等)。

注意

如果格式化里面包含了百分号,那么必须使用%%,这样Python就不会将百分号误认为是转换说明符了。

基本的转换说明符包含以下部分,注意其中的顺序:

  1. %字符:标记转换说明符的开始
  2. 转换标识(可选):-表示左对齐;+表示在转换值之前要加上正负号;""空白字符表示正数之前保留空格;0表示转换值若位数不够则用0填充
  3. 最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出
  4. 点(.)后跟精度值(可选):如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度将会从元组中读出。
  5. 转换类型,详见下表:
字符串格式转换类型
格式 描述
%c 字符及其ASCII码
%s 字符串(使用str转换任意Python对象)
%r 字符串(使用repr转换任意Python对象)
%d(%i) 有符号整数(十进制)
%u 无符号整数(十进制)
%o 无符号整数(八进制)
%x 无符号整数(十六进制)
%X 无符号整数(十六进制大写字符)
%e 浮点数字(科学计数法)
%E 浮点数字(科学计数法,用E代替e)
%f(%F) 浮点数字(用小数点符号)
%g 浮点数字(根据值的大小采用%e或%f)
%G 浮点数字(类似于%g)
%p 指针(用十六进制打印值的内存地址)
%n 存储输出字符的数量放进参数列表的下一个变量中

1.1 简单转换

简单的转换只需要写出转换类型即可,如下:

 # --- coding: utf-8 ---
from math import pi # 输出:'price of eggs: $42'
print 'price of eggs: $%d' % 42 # 输出:'Hexadecimal price of eggas: 2a'
print 'Hexadecimal price of eggas: %x' % 42 # 输出:'Pi: 3.141593...'
print 'Pi: %f...'% pi # 输出:'Very inexact estimate of pi: 3'
print 'Very inexact estimate of pi: %i' % pi # 输出:'using str: 42'
print 'using str: %s' % 42L # 输出:'Using repr: 42L'
print 'Using repr: %r' %42L

1.2 字段宽度和精度

转换说明符可以包括字段宽度和精度。字段宽度是转换后的值保留的最小字符个数,精度(对于数字转换来说)则是结果中应该包含的小数位数,或者(对于字符串转换来说)是转换后的值所能包含的最大字符个数。

 # --- coding: utf-8 ---
from math import pi # 输出: 3.141593
print '%10f' % pi # 字段宽:10 # 输出: 3.14
print '%10.2f' % pi # 字段宽:10,精度:2 # 输出:3.14
print '%.2f' % pi #精度2 # 输出:Guido
print '%.5s' % 'Guido van Rossum' # 精度:5 # 输出:Guido(使用元组参数-精度)
print '%.*s' % (5,'Guido van Rossum') # 精度:5 # 输出: Guido(使用元组参数-字段宽,精度)
print '%*.*s' % (10,5,'Guido van Rossum') # 字段宽:10,精度:5

1.3 符号、对齐和0填充

在字段宽度和精度值之前可以(可选)放置一个"标表",该标表的值可以是:

  • 0(零):表示数字将会用0进行填充
  • +(加号):表示不管是正数还是负数都标示出符号(在对齐时很有用)
  • -(减号):表示左对齐数值
  • 空格:表示正数前加上空格,这对需要对齐正负数时会很有用

具体使用方法可以参考下面的示例:

 # --- coding: utf-8 ---
from math import pi # 输出:0000003.14
print '%010.2f' % pi # 输出:3.14
print '%-10.2f' % pi # 输出:
#
# -10
print ('% 5d' % 10) + '\n' + ('% 5d' % -10) # 输出:
# +10
# -10
print ('%+5d' % 10) + '\n' + ('%+5d' % -10)

2. 常用字符串函数

Python为字符串创建了很多有用的函数,了解更多请参考Python文档:http://docs.python.org/2/library/string.html,下面例举了一下常用的字符函数。

2.1 find

find函数可以在一个较长的字符串中查找子字符串。并返回子串所在位置的最左端索引,如果没有找到则返回:-1,如下所示:

 # --- coding: utf-8 ---
title = "Monty Python's Flying Circus" # 返回:6
print title.find('Python') # 返回:-1
print title.find('ruby') # 返回:6,提供查找起始点(包含)
print title.find('Python',6) # 返回:6,提供查找起始点(包含)和结束点(不包含)
print title.find('Python',6,12)

2.1 join

join函数用来在队列中添加元素,和split函数作用相反。如下:

 # --- coding: utf-8 ---
seq = ['','','','','']
sep = '+'
dirs ='','usr','bin','env' # 输出:1+2+3+4+5
print sep.join(seq) # 输出:/usr/bin/env
print '/'.join(dirs) # 输出:C:\usr\bin\env
print 'C:' + '\\'.join(dirs)

2.2 lower

lower函数返回字符串的小写字母版本。如下:

 # --- coding: utf-8 ---
# 输出:apple
print 'APPLE'.lower()

2.3 replace

replace函数返回某字符串的所有匹配项均被替换自后得到字符串。如下:

 # --- coding: utf-8 ---
# 输出:Theez eez a test.
print 'This is a test.'.replace('is','eez')

2.4 split

join的逆函数,用来将字符串分割成序列,如下:

 # --- coding: utf-8 ---
seq = '1+2+3+4+5'
unix_dirs ='/usr/bin/env'
windows_dir = r'C:\usr\bin\env' print seq.split('+')
print unix_dirs.split('/')
print windows_dir.split('\\')
# 分别打印输出:
# ['1', '2', '3', '4', '5']
# ['', 'usr', 'bin', 'env']
# ['C:', 'usr', 'bin', 'env']

2.5 strip

strip函数剔除字符串两侧空格字符串(默认):

 # --- coding: utf-8 ---
fruit = ' apple and orange '
print repr(fruit)
print repr(fruit[:].strip())
print repr(fruit.strip(' app'))
# 分别输出:
# ' apple and orange '
# 'apple and orange'
# 'le and orange'

2.6 translate

translate函数和replace函数一样,用于替换字符串中的某个部分,但是和replace不同,translate只处理单个字符,而且可以同时进行多个替换。在使用translate函数转换之前,需要一张转换表,转换表中是以某个字符替换某个字符的对应关系,这个表中有256个字符,我们可以通过使用string模块中的maketrans函数简化这一操作:

 # --- coding: utf-8 ---
from string import maketrans
table = maketrans('cs','kz')
# 输出:thiz iz an inkredible tezt
print 'this is an incredible test'.translate(table)

参考资料&进一步阅读

《Python基础教程》

《Learn Python The Hard Way, 2nd Edition》

http://www.pythondoc.com/pythontutorial27/index.html

【循序渐进学Python】3. Python中的序列——字符串的更多相关文章

  1. 【循序渐进学Python】4. Python中的序列——字典

    字典是Python内建的六种序列之一.字典作为一种常用的数据结构,字典中的值没有特定顺序,每个值都对应于一个唯一的键.键可以是数字.字符串甚至是元组. 1. 创建和使用字典 Python中字典可以使用 ...

  2. 【循序渐进学Python】2. Python中的序列——列表和元组

    序列概览 在Python中有六种内建的序列:列表.元组.字符串.Unicode字符串.buffer对象和xrange对象.在这里暂时只讨论列表和元组.列表和元组的主要区别在于:列表可以修改,元组(不可 ...

  3. 【循序渐进学Python】15.网络编程

    Python 内置封装了很多常见的网络协议的库,因此Python成为了一个强大的网络编程工具,这里是对Python的网络方面编程的一个简单描述. 1. 常用的网络设计模块 在标准库中有很多网络设计相关 ...

  4. 【循序渐进学Python】5.Python常用流程控制及其他语句

    1. 赋值语句常用技巧 通过序列解包(sequence unpacking)可以将多个值的序列解开,让后一一放置到变量的序列中.解包的序列中的元素必须和等号左边变量数量一致.如下: values = ...

  5. 10.python中的序列

    本来说完字符串.数字.布尔值之后,应该要继续讲元祖.列表之类的.但是元祖和列表都属于序列,所以有必要先讲讲python的序列是什么. 首先,序列是是Python中最基本的数据结构.序列中的每个元素都分 ...

  6. 【循序渐进学Python】12.Python 正则表达式简介

    正表达式就是一段匹配文本片段的模式,在Python 中 re 模块包含了对正则表达式(regular expression)的支持. 1. 正则表达式的基本概念 1. 通配符 点号( . )可以匹配换 ...

  7. 【循序渐进学Python】10.模块和包

    1.导入模块 任何Python程序都可以作为模块导入,只要Python解释器能找到我们定义的模块所在位置即可,一般来讲,在一个模块被导入时,Python解释器会按照下面的步骤进行搜索: 在当前所在目录 ...

  8. 【循序渐进学Python】1. Python基础知识

    1. Python安装和配置 首先需要到Python的官方网站(http://www.python.org/getit/) 下载安装包,现在Python的发行版分为兼容之前Python程序的Pytho ...

  9. Python 分发包中添加额外文件【新手必学】

      在制作一个 Python 分发包时经常需要把一些文件添加到包中.最常见的例子是你希望通过 pip install命令安装 Python 包时会在 /etc/ 等目录下自动添加默认配置文件,由此可以 ...

随机推荐

  1. 深入剖析 redis AOF 持久化策略

    本篇主要讲的是 AOF 持久化,了解 AOF 的数据组织方式和运作机制.redis 主要在 aof.c 中实现 AOF 的操作. 数据结构 rio redis AOF 持久化同样借助了 struct ...

  2. sqlite 的比较等运算是根据不同的值而不同的,并不是根据的字段类型,因为 sqlite 是弱类型字段

    sqlite 的比较等运算是根据不同的值而不同的,并不是根据的字段类型,因为 sqlite 是弱类型字段   --------------------------------------------- ...

  3. 【News】SpagoBI中国官方微信对外发布

    爱数据,爱分析,爱达比 致力于国际优秀开源BI应用在中国的普及推广,用数据开启中小企业智慧之门: 扫描上图二维码,关注SpagoBI中国官方微信,2015年8月18日将在腾讯课堂.百度传课.网易云课堂 ...

  4. 菜鸟教程之工具使用(十)——用BlazeMeter录制JMeter测试脚本

    工具: 1,JMeter 2,Chrome 3,BlazeMeter 4,SwitchyOmega(如果需要代理) 步骤: 以上工具准备好以后就可以录制JMeter的测试脚本了, 在Chrome中点击 ...

  5. 高效开发Android App的10个建议

    假如要Google Play上做一个最失败的案例,那最好的秘诀就是界面奇慢无比.耗电.耗内存.接下来就会得到用户的消极评论,最后名声也就臭了.即使你的应用设计精良.创意无限也没用. 耗电或者内存占用等 ...

  6. android OOM分析工具LeakCanary

    http://my.oschina.net/u/255456/blog/523659?fromerr=oGosxKBf LeakCanary 只是探测到可能出现内存泄露,然后dump 一个java h ...

  7. 【Linux】——sleep无法正常休眠

    最近在开发项目的时候遇到一个问题,当使用 sleep(2) 的时候,程序居然没有按照指定的时间去休眠,但是连续执行两次 sleep(2) 的时候,程序可以正常的休眠 2 秒.真是见鬼了.最后查看了以下 ...

  8. Strategy策略设计模式

    1.策略模式和状态模式的区别和联系(本部分转载自:http://letscoding.cn/java%E4%B8%AD%EF%BC%8C%E7%8A%B6%E6%80%81%E6%A8%A1%E5%B ...

  9. SQLSERVER建立MYSQL连接服务器

    1. 在SQL SERVER端安装MYSQL的ODBC驱动 2. 在ODBC数据源添加MYSQL(控制面板\所有控制面板项\管理工具) 在用户DSN 和系统DSN添加配置驱动程序 注:字符集一定要和M ...

  10. Unity3D]引擎崩溃、异常、警告、BUG与提示总结及解决方法

    此贴会持续更新,都是项目中常会遇到的问题,总结成贴,提醒自己和方便日后检查,也能帮到有需要的同学. 若各位有啥好BUG好异常好警告好崩溃可以分享的话,请多多指教.xuzhiping7#qq.com. ...