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

基本字符串操作


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

字符串格式化:精简版


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

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

>>> 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. php实现调用微信上传照片然后保存至服务器与数据库

    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>    <s ...

  2. (转)火溶CEO王伟峰:Unity3D手机网游开发

    今天看到这篇文章,感觉很不错,尤其是那句“Unity3D的坑我觉得最严重的坑就是没有懂3D的程序员,把Unity当成Office用”. 转自http://blog.csdn.net/wwwang891 ...

  3. SCRUM,一个采用迭代,增量方法来优化可预见控制风险

    Scrum是一个用于开发和维持复杂产品的框架,是一个增量的,迭代的开发过程.在这个框架中,整个开发过程是由若干个短的迭代周期组成,一个短的迭代周期称为一个Sprint,每个Sprint的建议长度是2到 ...

  4. java对象数组

    问题描述:     java 对象数组的使用 问题解决: 数组元素可以是任何类型(只要所有元素具有相同的类型) 数组元素可以是基本数据类型 数组元素也可以是类对象,称这样的数组为对象数组.在这种情况下 ...

  5. efficient c++,单线程内存池

    基于 http://www.cnblogs.com/diegodu/p/4555018.html operator new的知识基础上 介绍这个章节的内容 对于一般直接 new 与delete 性能较 ...

  6. OpenSSL重大漏洞-Heartbleed之漏洞利用脚本POC讲解

    OpenSSL Security Advisory [07 Apr 2014] ======================================== TLS heartbeat read ...

  7. Hibernate-Validation的使用

    首先是要加入下面两个包 hibernate-validator-4.1.0.Final.jar validation-api-1.0.0.GA.jar 如果在验证不通过的时候进行了添加.更新或删除操作 ...

  8. HDU2896+AC自动机

    ac自动机 模板题 /* */ #include<stdio.h> #include<string.h> #include<stdlib.h> #include&l ...

  9. hbase集群在启动的时候找不到JAVA_HOME的问题

    hbase集群在启动的时候找不到JAVA_HOME的问题,启动集群的时候报错信息如下: root@master:/usr/local/hbase-/bin# ./start-hbase.sh star ...

  10. 使用JS创建表格以及隔行换色(包括隔N行换色)

    <html> <head> <title></title> <style> table{ width:800px; border-colla ...