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

基本字符串操作


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

字符串格式化:精简版


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

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

>>> 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. linux系统日志使用

    FROM:http://blog.csdn.net/zzxian/article/details/7905964 Part I: syslogd & klogd   ---------/etc ...

  2. UILabel设置行间距和字间距并计算高度-b

    #define UILABEL_LINE_SPACE 6 #define HEIGHT [ [ UIScreen mainScreen ] bounds ].size.height //给UILabe ...

  3. no appropriate service handler found The Connection descriptor used by the client was: localhost:1521:myorcl

    参考网址:http://www.2cto.com/database/201205/133542.html http://www.cnblogs.com/kerrycode/p/4244493.html ...

  4. 【string】KMP, 扩展KMP,trie,SA,ACAM,SAM,最小表示法

    [KMP] 学习KMP,我们先要知道KMP是干什么的. KMP?KMPLAYER?看**? 正如AC自动机,KMP为什么要叫KMP是因为它是由三个人共同研究得到的- .- 啊跑题了. KMP就是给出一 ...

  5. BZOJ 1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果

    Description 每年万圣节,威斯康星的奶牛们都要打扮一番,出门在农场的N(1≤N≤100000)个牛棚里转悠,来采集糖果.她们每走到一个未曾经过的牛棚,就会采集这个棚里的1颗糖果. 农场不大, ...

  6. solr教程,值得刚接触搜索开发人员一看

    http://blog.csdn.net/awj3584/article/details/16963525 Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍sol ...

  7. grep正则表达式后面的单引号和双引号的区别

    单引号''是全引用,被单引号括起的内容不管是常量还是变量者不会发生替换:双引号""是部分引用,被双引号括起的内容常量还是常量,变量则会发生替换,替换成变量内容! 一般常量用单引号' ...

  8. *[topcoder]GUMIAndSongsDiv1

    http://community.topcoder.com/stat?c=problem_statement&pm=12706&rd=15700 这题有意思.首先要观察到,如果选定一些 ...

  9. Discuz模版与插件 安装时提示“对不起,您安装的不是正版应用...”解决方法

    关于出现“对不起,您安装的不是正版应用..”的解决办法 有些插件和风格在安装时出现不能安装的现象,出现以下提示:       对不起,您安装的不是正版应用,安装程序无法继续执行       点击这里安 ...

  10. QT UAC问题汇总贴

    http://www.qtcn.org/bbs/read-htm-tid-47983.html http://www.cnblogs.com/bombless/archive/2010/12/29/h ...