本章讲话介绍如何使用字符串格式化其他的值,并简单了解一下利用字符串的分割、联接、搜索等方法能做些什么。

基本字符串操作


  所有标准的序列操作(索引、分片、乘法。判断成员资格、求长度、取最大最小值)对字符串同样适用,但,字符串都是不可变的,因此字符串的分片赋值是不合法的。

字符串格式化:精简版


字符串格式化 使用 字符串格式化操作符,即百分号 % 来实现。

在%的左侧放置一个字符串(格式化字符串),而右侧放置希望格式化的值。

>>> format = 'My %s %s is football'
>>> values = ('favor','sport')
>>> print format %values
My favor sport is football

格式化字符串的%s部分称为转换说明符(conversion specifier),它们标记了需要插入转换值的位置。s表示会被格式化为字符串--如果不是字符串,则会用str将其转换为字符串。

格式化实数,可以用f说明符,同时提供所需要的精度:一个句点再加上希望保留的小数位数。例子如下:

>>> format = 'Pi is with three decimals: %.3f'
>>> from math import pi
>>> print format % pi
Pi is with three decimals: 3.142

字符串格式化:完整版


基本的转换说明符包括以下部分:

  • %字符:标记转换说明符的开始;
  • 转换标志(可选):- 表示左对齐; +表示在转换值之前要加上正负号;" "(空白字符)表示正数之前保留空格;0 表示转换值若位数不够则用0填充;
  • 最小字段宽度(可选):转换后的字符串至少应该具有该值的指定的宽度。如果是*,则宽度会从值元组中读出;
  • 点(.)后跟精度值(可选):转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出;
  • 转换类型表:

  1. 简单转换

    >>> 'price of the eggs: %d' %9.5
    'price of the eggs: 9'
    >>> 'test tr :%s' %42L
    'test tr :42'
    >>> 'test tr: %r' %42L
    'test tr: 42L'
  2. 字段宽度和精度
    >>> from math import pi
    >>> '%10f' %pi #字段宽度10
    '  3.141593'
    >>> '%10.2f' %pi    #字段宽度10,精度2
    '      3.14'
    >>> '%.2f' %pi #精度2
    '3.14'
    >>> '%.5s' %'python is funny'
    'pytho'

    可以使用 * 作为字段宽度或者精度

    >>> '%.*s' %(3,'testing')
    'tes'
  3. 符号、对齐和0填充
    >>> '%010.2f' %pi
    '0000003.14'

    在字段宽度和精度值之前还可以放置一个“标表”,该标表可以是零、加号、减号 或者是空格。零表示数字将会用0进行填充。

    减号(-)用来左对齐数值

    >>> '%-10.2f' %pi
    '3.14      '

    +,表示不管是正数还是负数都标出符号

    >>> print ('%+5d' %10)+ '\n' + ('%+5d' %-10)
      +10
      -10

    代码清单中的代码将使用星号字段宽度说明符来格式化一张包含水果价格的表格,表格的总宽度由用户输入。因为是用户提供信息,所以就不能在转换说明符中将字段宽度硬编码。使用星号运算符就可以从转换元组中读出字段宽度。

    #user provide the list's width
    width = input('Please enter the width:')
    
    price_width = 10
    item_width = width - price_width
    
    header_format = '%-*s%*s'
    format = '%-*s%*.2f'
    
    print '='* width
    print header_format %(item_width, 'item' , price_width, 'price')
    
    print '-'*width
    
    print format %(item_width,'apples',price_width,0.5)
    print format %(item_width,'apples',price_width,0.6)
    print format %(item_width,'apples',price_width,0.7)
    
    print '='*width

    结果如下:

    Please enter the width:50
    ==================================================
    item                                         price
    --------------------------------------------------
    apples                                        0.50
    apples                                        0.60
    apples                                        0.70
    ==================================================
    >>> 

字符串方法


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

    >>> 'my test python program'.find('python')
    8
    >>> title = 'python basic book'
    >>> title.find('python')
    0
    >>> title.find('books')
    -1
  2. split
    它是join的逆方法,用来将字符串分割成序列。
    >>> '1+2+3+4+5'.split('+')
    [']
    >>> '/usr/bin/local'.split('/')
    ['', 'usr', 'bin', 'local']
    >>> 'Using the default'.split()
    ['Using', 'the', 'default']

    如果不提供任何分隔符,程序会把所有空格作为分隔符(空格,制表,换行等)

  3. join
    join是split方法的逆方法,用来在队列中添加元素:
    >>> seq = ['a','b','c']
    >>> sep = '+'
    >>> sep.join(seq)
    'a+b+c'
    >>> dirs = '','usr','bin','local'
    >>> '/'.join(dirs)
    '/usr/bin/local'
    >>> print 'C:'+ '\\'.join(dirs)
    C:\usr\bin\local#转义符示例
    >>> '\\'
    '\\'
    >>> print 's'+'\n'+'s'
    s
    s
    >>> print 's'+'\t'+'s'
    s    s
    >>> print 's'+'\\'+'s'
    s\s
  4. lower
    >>> 'My Lower Program!'.lower()
    'my lower program!'
    >>> names = ['apple','banana','pear']
    >>> name = 'Apple'
    >>> if name.lower() in names:
        print name
    
    Apple
  5. replace
    replace方法返回某字符串的所有匹配项均被替换后得到的字符串。
    "test str is 'str'".replace('str','python')
    "test python is 'python'"
  6. strip
    strip方法返回去除两侧(不包括内部)空格的字符串:
    >>> '    test    '.strip()
    'test'
  7. translate
    translate方法和replace方法一样,可以替换字符串中的某些部分,但是和前者不同的是,translate方法只处理单个字符。它的又是在于可以同时进行多个替换。

《Python基础教程(第二版)》学习笔记 -> 第三章 使用字符串的更多相关文章

  1. <<Python基础教程>>学习笔记 | 第10章 | 充电时刻

    第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简 ...

  2. <<Python基础教程>>学习笔记 | 第04章 | 字典

    第04章:字典 当索引不好用时 Python唯一的内建的映射类型,无序,但都存储在一个特定的键中.键能够使字符.数字.或者是元祖. ------ 字典使用: 表征游戏棋盘的状态,每一个键都是由坐标值组 ...

  3. <<Python基础教程>>学习笔记 | 第12章 | 图形用户界面

    Python支持的工具包非常多.但没有一个被觉得标准的工具包.用户选择的自由度大些.本章主要介绍最成熟的跨平台工具包wxPython.官方文档: http://wxpython.org/ ------ ...

  4. <<Python基础教程>>学习笔记 | 第11章 | 文件和素材

    打开文件 open(name[mode[,buffing]) name: 是强制选项,模式和缓冲是可选的 #假设文件不在.会报以下错误: >>> f = open(r'D:\text ...

  5. Jquery基础教程第二版学习记录

    本文仅为个人jquery基础的学习,简单的记录以备忘. 在线手册:http://www.php100.com/manual/jquery/第一章:jquery入门基础jquery知识:jquery能做 ...

  6. python基础教程第二版 第一章

    1.模块导入python以增强其功能的扩展:三种方式实现 (1). >>> Import math >>> math.floor(32.9) 32.0 #按照 模块 ...

  7. 第二章、元组和列表(python基础教程第二版 )

    最基本的数据结构是序列,序列中每个元素被分配一个序号-元素的位置,也称索引.第一个索引为0,最后一个元素索引为-1. python中包含6种内建的序列:元组.列表.字符串.unicode字符串.buf ...

  8. <<Python基础课程>>学习笔记 | 文章13章 | 数据库支持

    备注:本章介绍了比较简单,只是比较使用样品,主要假设是把握连接,利用数据库.和SQLite做演示样本 ------ Python数据库API 为了解决Python中各种数据库模块间的兼容问题,如今已经 ...

  9. c#高级编程第七版 学习笔记 第三章 对象和类型

    第三章 对象和类型 本章的内容: 类和结构的区别 类成员 按值和按引用传送参数 方法重载 构造函数和静态构造函数 只读字段 部分类 静态类 Object类,其他类型都从该类派生而来 3.1 类和结构 ...

随机推荐

  1. sharepoint 2010 masterpage中必须的Content PlaceHolder

    Professional SharePoint 2010 Branding and Use

  2. iOS中的固定 高度

    iOS键盘高度   英文 216(不带联想功能) 英文 252(带联想功能)  中文 252 系统自带表情键盘的高度是 253   在使用系统键盘的时候,如果遇到输入框被键盘挡住的情况 就要用通知中心 ...

  3. VC++创建、调用dll的方法步骤

    文章来源:http://www.cnblogs.com/houkai/archive/2013/06/05/3119513.html 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有 ...

  4. 然爸读书笔记(2013-4)----打造facebook

    扎克伯格的真实一面 (1)在公司内部知无不言,扎克伯格在公司内部问答时间.尽可能回答员工的任何问题,保持足够的透明度. (2)员工只有做到对外守口如瓶,我们才能做到对内知无不言. (3)faceboo ...

  5. 使用 PIVOT 和 UNPIVOT

    http://msdn.microsoft.com/zh-cn/library/ms177410%28v=SQL.90%29.aspx 可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式 ...

  6. Mybatis的分页查询

    示例1:查询业务员的联系记录 1.控制器代码(RelationController.java) //分页列出联系记录 @RequestMapping(value="toPage/custom ...

  7. 在非MFC程序中引用CString

    CString在当今软件设计界里还是小有名气的,说它是MFC中使用的最多的类一点也不过,然而在使用sdk编windows程序的时候,确不能利用CString类,只能用sdk的运行时库,比如strlen ...

  8. DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录(转)

    http://www.cnblogs.com/LittleHann/p/3828927.html 相关学习资料 http://baike.baidu.com/link?url=77B3BYIuVsB3 ...

  9. BIRT使用1:简介、概念、元素、报表设计器组成

    前一篇博客对birt进行了一个初探,相信通过上篇博客大家对birt有个初步认识,接下来我们随着下面这张思维导图的展示,进入birt的使用学习. 这一篇博客是第一部分,主要介绍一下birt的简介.概念. ...

  10. MySQL open table

    背景:    MySQL经常会遇到Too many open files,MySQL上的open_files_limit和OS层面上设置的open file limit有什么关系? 源码中也会看到不同 ...