字符串是零个或多个的字符所组成的序列,字符串是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 简单转换

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

  1. # --- coding: utf-8 ---
  2. from math import pi
  3.  
  4. # 输出:'price of eggs: $42'
  5. print 'price of eggs: $%d' % 42
  6.  
  7. # 输出:'Hexadecimal price of eggas: 2a'
  8. print 'Hexadecimal price of eggas: %x' % 42
  9.  
  10. # 输出:'Pi: 3.141593...'
  11. print 'Pi: %f...'% pi
  12.  
  13. # 输出:'Very inexact estimate of pi: 3'
  14. print 'Very inexact estimate of pi: %i' % pi
  15.  
  16. # 输出:'using str: 42'
  17. print 'using str: %s' % 42L
  18.  
  19. # 输出:'Using repr: 42L'
  20. print 'Using repr: %r' %42L

1.2 字段宽度和精度

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

  1. # --- coding: utf-8 ---
  2. from math import pi
  3.  
  4. # 输出: 3.141593
  5. print '%10f' % pi # 字段宽:10
  6.  
  7. # 输出: 3.14
  8. print '%10.2f' % pi # 字段宽:10,精度:2
  9.  
  10. # 输出:3.14
  11. print '%.2f' % pi #精度2
  12.  
  13. # 输出:Guido
  14. print '%.5s' % 'Guido van Rossum' # 精度:5
  15.  
  16. # 输出:Guido(使用元组参数-精度)
  17. print '%.*s' % (5,'Guido van Rossum') # 精度:5
  18.  
  19. # 输出: Guido(使用元组参数-字段宽,精度)
  20. print '%*.*s' % (10,5,'Guido van Rossum') # 字段宽:10,精度:5

1.3 符号、对齐和0填充

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

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

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

  1. # --- coding: utf-8 ---
  2. from math import pi
  3.  
  4. # 输出:0000003.14
  5. print '%010.2f' % pi
  6.  
  7. # 输出:3.14
  8. print '%-10.2f' % pi
  9.  
  10. # 输出:
  11. #
  12. # -10
  13. print ('% 5d' % 10) + '\n' + ('% 5d' % -10)
  14.  
  15. # 输出:
  16. # +10
  17. # -10
  18. print ('%+5d' % 10) + '\n' + ('%+5d' % -10)

2. 常用字符串函数

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

2.1 find

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

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

2.1 join

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

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

2.2 lower

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

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

2.3 replace

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

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

2.4 split

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

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

2.5 strip

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

  1. # --- coding: utf-8 ---
  2. fruit = ' apple and orange '
  3. print repr(fruit)
  4. print repr(fruit[:].strip())
  5. print repr(fruit.strip(' app'))
  6. # 分别输出:
  7. # ' apple and orange '
  8. # 'apple and orange'
  9. # 'le and orange'

2.6 translate

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

  1. # --- coding: utf-8 ---
  2. from string import maketrans
  3. table = maketrans('cs','kz')
  4. # 输出:thiz iz an inkredible tezt
  5. 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. ECshop鼠标划过弹出 微信扫一扫代码

     效果如上图 安装步骤:1,将以下代码放到page_header.lbi里   <div class="f_l"><a href="../index.p ...

  2. SymmetricDS 数据库双向同步开源软件入门

    一句话概括该软件:SymmetricDS是一个文件和数据库同步软件,开源的,支持多主复制,同步时过滤和在异构的网络环境中进行数据转换传输.它支持单向和双向上的多个订阅者,异步的数据复制. 以下是从CS ...

  3. WindowsCE project missing - 转

    00x0 前言 之前在Windows 7系统中开发的WindowsCE项目,最近换成Windows 10系统,需要将项目进行修改,打开项目后提示如下错误: 无法读取项目文件“App.csproj”.. ...

  4. cocos2dx的lua绑定

    一.cocos2dx对tolua++绑定的修正 A.c对lua回调函数的引用 在使用cocos2dx编写游戏时,我们经常会设置一些回调函数(时钟.菜单选择等).如果采用脚本方式编写游戏的话,这些回调函 ...

  5. git pull 指定版本

    git init git remote add origin git@bitbucket.org:huashiyiqike/lstm-hf.git git pull origin master

  6. 数据库同步工具HKROnline SyncNavigator SQL Server互同步MySQL

    需要联系我QQ:786211180 HKROnline SyncNavigator 是一款专业的 SQL Server, MySQL 数据库同步软件.它为您提供一种简单智能的方式完成复杂的数据库数据同 ...

  7. (转)2G到C-RAN网络架构的演进

    这是我一个学霸师弟写的一篇知识普及的文章,涉及到的知识结构很全面,很丰富,对网络通信技术感兴趣的童鞋可以看看,内容我就不贴过来了,直接到他博客上去看吧. 2G到C-RAN网络结构演进

  8. C# 128位AES 加密解密 (转)

    /// AES加密 2         /// </summary> 3         /// <param name="inputdata">输入的数据 ...

  9. CenOS6.3 ssh 公钥认证报错:Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

    转载自 http://laowafang.blog.51cto.com/251518/1364298 1.说明: ssh无密码用户远程登录,一直以来使用是debian操作系统,对用户目录权限要求没有关 ...

  10. [转]SpringMVC Controller&View数据传递

    Spring MVC3在controller和视图之间传递参数的方法:   一, 从controller往视图传递值, controller---->视图   1)简单类型,如int, Stri ...