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

基本字符串操作


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

字符串格式化:精简版


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

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

>>> 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. Schtasks 命令详解

    管理计划任务 SCHTASKS /parameter [arguments] 描述:     允许管理员创建.删除.查询.更改.运行和中止本地或远程系统上的计划任务. 参数列表:     /Creat ...

  2. kill 进程卡住,超时kill方法

    还是有漏洞 ,万一 working.py未超时, kill_job.sh 会不会杀死别人的进程啊start.sh#!/bin/bash python working.py &python wo ...

  3. .substr()在字符串每个字母前面加上一个1

    var str = "abcdefghijklmnopq", name = "1", ary = []; for(var i = 0,len = str.len ...

  4. ASProtect.SKE.2.11 stolen code解密

    关于ASProtect.SKE.2.11 stolen code方面的文章已经很多了,今天我想再详细地说说它的细节,献给喜欢破解的兄弟们. stolen code并不可怕! ASProtect.SKE ...

  5. C++ DLL 模板 .

    C++ DLL 模板 1.使用VS2005创建Win32 DLL项目,选择空项目,然后加入CppDll.h和CppDll.cpp文件. 2.修改CppDll.h和CppDll.cpp文件使之成为需要的 ...

  6. POJ3283+字典树

    简单的字典树 /* 字典树 构造字典树.注意初始化! */ #include<stdio.h> #include<string.h> #include<stdlib.h& ...

  7. NAT负载均衡

    NAT(Network Address Translation 网络地址转换)简单地说就是将一个IP地址转换为另一个IP地址,一般用于未经注册的内部地址与合法的.已获注册的Internet IP地址间 ...

  8. 通过 PHP 判断用户的设备是否是移动设备

    <?php function isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROF ...

  9. android系统平台显示驱动开发简要:LCD基本原理篇『一』

    平台信息:内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博客 ...

  10. 关于ckeditor添加的class都会被清除掉的问题

    在源码中输入ul,并且带有class,然后点击源码,到可视化界面 结果显示为aaa,再点看源码,查看HTML源代码 解决方法: 添加配置 config.allowedContent = true 这个 ...