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

基本字符串操作


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

字符串格式化:精简版


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

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

>>> 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. 分布式日志收集系统--Chukwa

    1. 安装部署 1.1 环境要求 1.使用的JDK的版本必须是1.6或者更高版本,本实例中使用的是JDK1.6 2.使用的hadoop的版本必须是Hadoop0.20.205.1及以上版本,本实例中使 ...

  2. sqlserver自定义函数【粘】

     用户定义自定义函数像内置函数一样返回标量值,也可以将结果集用表格变量返回 用户自定义函数的类型: 标量函数:返回一个标量值 表格值函数{内联表格值函数.多表格值函数}:返回行集(即返回多个值) 1. ...

  3. mysql-community-server 5.7.16 设置密码

    那是由于mysql-community-server 5.7的密码是一个默认的随机密码,这个初始密码,mysql又不告诉你,我们需要重设这个密码. service mysqld stop mysqld ...

  4. js学习之函数声明与函数表达式区别[原创]

    作为一名js初学者,与大家分享下.Javascript中有函数声明提升的功能,会优先编译函数声明部分.比如, ff(); function ff(){ alert("hello world. ...

  5. (转)inux Read系统调用

    转载网址:http://my.oschina.net/haomcu/blog/468656 1. 什么是系统调用 2. read系统调用在内核空间的处理层次模型 3. 相关的内核数据结构 4. rea ...

  6. O2O模式

    O2O即Online To Offline(在线离线/线上到线下) 是指将线下的商务机会与互联网结合,让互联网成为线下交易的前台,这个概念最早来源于美国.O2O的概念非常广 泛,既可涉及到线上,又可涉 ...

  7. Hibernate - SQLQuery

    使用SQLQuery 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询. 标量查询 ...

  8. 5.1:FactoryBean的使用

    5.1  FactoryBean的使用 一般情况下,Spring通过反射机制利用bean的class属性指定实现类来实例化bean .在某些情况下,实例化bean过程比较复杂,如果按照传统的方式,则需 ...

  9. [cc150] check palindrome of a singly linked list

    Problem: Implement a function to check if a singly linked list is a palindrome. 思路: 最简单的方法是 Reverse ...

  10. ural 1160

    最小生成树  第一次敲 套用几个函数 其实挺容易的 #include <cstdio> #include <cstring> #include <vector> # ...