字符串操作

虽然字符串也是一种序列,但是它和元组一样,不可变的。当你想对它修改时,会引发异常。如

>>> strings = "Let's go"
>>> strings[2] = 'B'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

其他的标准的序列操作,都是可以的。

>>> strings[2]
't'

格式化字符串

>>> formats = 'I am %s'
>>> values = 'zhao'
>>> formats % values
'I am zhao'

formats 是格式化的字符串  values 希望被格式化的值,如果格式化的值有多个的话,一般使用元组。

>>> formats = 'My name is %s , I come from %s'
>>> values = 'Zhao','China'
>>> formats % values
'My name is Zhao , I come from China'

注意 使用列表和其他序列代替元组,只会格式化一个值。只有元组和字典格式化多个值。

其中 %s 称为 转换说明符 (conversion specifier)  s 表示格式化字符串 , 关于其他的可以看表 3 - 1

如果格式化字符串中,包含 % ,那么使用 %% 。就不会误认为转换说明符了。

>>> formats = 'My name is %% %s , I come from %s'
>>> formats % values
'My name is % zhao , I come from china'

格式化字符串希望保留小数位数 如

>>> fomats = 'Pi is %.3f'
>>> fomats % pi
'Pi is 3.142'

%.3f  .3 表示保留的浮点数位数 f 表示浮点数

模板字符串

>>> from string import Template
>>> s = Template('$x is $x')
>>> s.substitute(x='111')
'111 is 111'

如果替换是单词的一部分,必须用 中括号 %{x}  扩起来,不扩起来会引发异常

>>> s = Template("${x}ssss $x ${x}fffff")
>>> s.substitute(x='BB')
'BBssss BB BBfffff'

如果插入美元符号 $$

>>> s = Template("${x}ssss $$ $x ${x}fffff")
>>> s.substitute(x='BB')
'BBssss $ BB BBfffff'

除了关键字参数以外,还可以用字典 键值对形式

>>> s = Template("A $thing $run")
>>> d = {}
>>> d['thing'] = 'thingsssss'
>>> d['run'] = 'runnnnn'
>>> s.substitute(d)
'A thingsssss runnnnn'

用 safe_substitute 方法 不会因为缺少值,而报错。

下面这种格式化字符串会报错,元组 需要 括号 扩起来

错误的

>>> '%s %s %s' % 1,2,3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string

正确应该

>>> '%s %s %s' % (1,2,3)
'1 2 3'

详细的转换说明符

(1) %字符:标记开始转换说明符

(2) 转换标志(可选):  -  表示左对齐; + 表示在转换值之前要加上正负号;"" 表示正数之前保留空格 0 表示转换值若位数不够则用9填充。

(3) 最小字段宽带(可选): 转换后的字符串至少具有该值指定宽度。 如果 * ,则宽度会从元组读出。

(4) 点 (.) 后跟精度值 (可选):如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果 * ,则精度会从元组中读出。

示例一  带符号十进制整数

>>> 'Price of eggs:$%d' % 42
'Price of eggs:$42'

>>> from math import pi
>>> 'pi is %i' % pi
'pi is 3'

示例二  不带符号十六进制

>>> 'Hexadecimal price of eggs %X' % 42
'Hexadecimal price of eggs 2A'
>>> 'Hexadecimal price of eggs %x' % 42
'Hexadecimal price of eggs 2a'

示例三  str函数转换对象

>>> 'Using str of %s' % 42L
'Using str of 42'

示例四 repr函数转换对象

>>> 'Using repr of %r' % 42L
'Using repr of 42L'

字符串表示函数 str、repr

str 把值转换合理的字符串形式,以便用户理解。

repr  把值转换Python表达的字符串形式。

>>> str("Let's go!")
"Let's go!"

>>> repr("Let's go!")
'"Let\'s go!"'

示例五  字段宽度 和 精度

字段宽度 20

>>> '%20s' % 'hello world!'
' hello world!'

精度 2

>>> '%.2f' % 10.9373
'10.94'

>>> '%.2s' % 'Hello World!'
'He'

字段宽度 20 精度 2

>>> '%20.2s' % 'Hello World!'
' He'

用 * 号 代替字段宽度 和 精度

>>> '%*.*s' % (10,2,'Hello World!')
' He'

符号、对齐和0填充 针对数字

字段宽度和精度值之前放置一个'标志',标志 有 零、加号、减号和空格。

示例 零

>>> '%010.2f' % pi
'0000003.14'

示例 减 左对齐数值

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

示例 加 显示正负数符号

>>> print('%+10.2f' % 3.14) + '\n'+ ('%+10.2f' % -3.14)
+3.14
-3.14

示例 空格 对齐正负数

>>> print('% 10.2f' % 3.14) + '\n'+ ('% 10.2f' % -3.14)
3.14
-3.14

一个比较简单的程序示例

width = input('Please enter width:')

price_width = 10
item_width = width - price_width header_format = '%-*s%*s'
sub_format = '%-*s%*.2f' print '=' * width print header_format % (item_width, 'Item', price_width, 'Price') print '-' * width print sub_format % (item_width, 'Apple', price_width, 2.4)
print sub_format % (item_width, 'Samsung', price_width, 1.4) print '=' * width

字符串方法

函数一 find

>>> text_content = "Let's go go!"
>>> text_content.find('go')
6
>>> text_content.find('go2')
-1
>>> text_content.find('Let')
0

find 函数 第二个和第三个参数 值的 起始点和终止点

>>> text_content.find('go',1,5)
-1

 >>> text_content.find('go',8)
  9

函数二 join

join 连接序列中的每个元素 而且连接的元素,必须是字符串

它是 split 逆方法

>>> __list = [1,2,3,4,5]
>>> __str = '+'
>>> __str.join(__list)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
>>> __list = ['','','','','']
>>> __str.join(__list)
'1+2+3+4+5'

函数三 lower

lower 把字符串转换为小写字符母

>>> 'How Are You'.lower()
'how are you'

还有一些其他相关的有 translate、islower、capitalize、swapcase、title、istitle、upper、isupper

>>> 'how are you'.title()
'How Are You'

 >>> import string

>>> string.capwords("that's all, folks")
 "That's All, Folks"

函数四 replace

replace 返回某字符串所有匹配项被替换后的字符串。

>>> 'go go go go go is go'.replace('go','egg')
'egg egg egg egg egg is egg'

关联的其他函数  translate、expandtabs

函数五 split

>>> '1+2+3+4+5'.split('+')
['', '', '', '', '']

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

关联的其他函数  join、rsplit、splitlines

函数六 strip

>>> '   go go go   '.strip()
'go go go'

strip 去除两个(不包括内部)空格字符串。也可以去除指定符号

>>> '1122**   go go go  112222** '.strip('12* ')
'go go go'

其他函数

lstrip   删除字符串左边的指定字符

rstrip  删除字符串右边的指定字符

函数七 translate

translate替换单个字,它优势可以同时进行多个替换,有些时候比replace效率高。

>>> intab = 'a'
>>> outtab = ''
>>> trantab = maketrans(intab,outtab)
>>> str = 'abal'
>>> print str.translate(trantab)
0b0l
maketrans 函数接受两个参数 两个等长的字符串。它返回的是 转换表

其他函数:replace,lower

函数八 upper 大写

>>> 'hello'.upper()
'HELLO'

函数九 capwords 首字母大写

>>> string.capwords('hello words!')
'Hello Words!'

Python 字符串 (3) 持续更新的更多相关文章

  1. LeetCode python实现题解(持续更新)

    目录 LeetCode Python实现算法简介 0001 两数之和 0002 两数相加 0003 无重复字符的最长子串 0004 寻找两个有序数组的中位数 0005 最长回文子串 0006 Z字型变 ...

  2. LeetCode 题目的 Python 实现(持续更新中)

    Python-LeetCode 是一个使用 Python 语言解决 LeetCode 问题的代码库,库有以下几个方面需要注意: 所有题目都是 AC 的: 按照题目顺序,每 50 个放在一个目录下,方便 ...

  3. Python相关工具清单[持续更新]

    SublimeJEDI : awesome Python autocompletion with SublimeText. Awesome Python : A curated list of awe ...

  4. Python 字典 (4) 持续更新

    字典一种用名字来引用值的数据结构,这种数据结构称为 映射(mapping) .字典中的键可以是数字.字符串和元组. 字典 创建和使用 创建 phonebook = {'Aaron':133000000 ...

  5. python笔记(持续更新)

    1.编译python遇到下面的编码问题:     SyntaxError: Non-ASCII character '\xe9' in file E:\projects\learn.py on lin ...

  6. python tips(持续更新中)

    python tips 可变对象与不可变对象 在python中,可变对象有数值类型(int,float),字符串(str),元组(tuple),可变对象有列表(list),字典(dict),集合(se ...

  7. Python小练习(持续更新....)

    最近一直在学习python,这些小练习有些是书上的,有些是别人博客上的! # 1.题目1# 给一个字符串,统计其中的数字.字母和其他类型字符的个数:# 比如输入“124mid-=”,输出:数字=3,字 ...

  8. python内置模块笔记(持续更新)

    常用函数name = '{wh}my \t name is {name},age is {age}.' print(name.capitalize()) # 字符串的开头字母大写 print(name ...

  9. python tips(持续更新)

    1. 引用上一层目录 import syssys.path.append('..')import xx 2. python json JSON是一种轻量级的数据交换格式.可以解决数据库中文存储问题,对 ...

随机推荐

  1. Qt全局坐标和相对坐标

    QMouseEvent中两类坐标系统,一类是窗口坐标,一类是显示器坐标. QPoint QMouseEvent::pos() 返回相对这个widget(重载了QMouseEvent的widget)的位 ...

  2. [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar打在jar包中

    本文需要参考前文: [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar在子目录中 上文是导出的运行的依赖jar被放在了子目录中,本文是将依赖jar放在可运行jar的本身,这样发布的 ...

  3. [转帖]订购微软Windows 7延长支持服务的报价曝光 第三年要价两百美金

    订购微软Windows 7延长支持服务的报价曝光 第三年要价两百美金 cnbeta 年2月份的新闻 https://www.cnbeta.com/articles/tech/815885.htm 微软 ...

  4. 【转帖】sysbench的安装和做性能测试

    iMySQL | 老叶茶馆 sysbench的安装和做性能测试 http://imysql.cn/node/312 我仿照这个学的 但是 需要用更新的版本才可以.   By yejr on 14 六月 ...

  5. 快速查看表结构 SQL server查看表注释以及字段注释表结构字段说明

    DECLARE @tableName NVARCHAR(MAX);SET @tableName = N'UserIntegralExchange';   --表名!!! SELECT CASE WHE ...

  6. 高深的dp POJ 2229Sumsets

    对于这个问题, 我们显然可以看出来, 当他是奇数的时候, 直接等于他的前一个偶数 dp [ i ] = dp [ i - 1] ; 那么问题, 当它是偶数的时候, 我们应该怎么进行 dp 记忆化搜索并 ...

  7. 把人都送到房子里的最小花费--最小费用最大流MCMF

    题意:http://acm.hdu.edu.cn/showproblem.php?pid=1533 相邻的容量为inf,费用为1,S到m容量为1,费用为0 ,H到T容量为1,费用为0. 建图跑-最小费 ...

  8. Linux挂载磁盘&kuoron

    1.添加磁盘 物理服务器直接插上硬盘即可,虚拟机的话给直接添加磁盘即可,不懂的可以自行百度,比较简单. 2.管理磁盘分区,fdisk命令. 在Linux系统中,管理硬盘设备最常用的方法就当属 fdis ...

  9. Python---通配符的使用

    苹果单价 9.00 元/斤,购买了 5.00 斤,需要支付 45.00 元 在 Python 中可以使用 print 函数将信息输出到控制台 如果希望输出文字信息的同时,一起输出 数据,就需要使用到  ...

  10. 用于Linq的去重 Distinct

            /// <summary>         /// 用于Linq的去重,扩展方法需要放到静态类中         /// </summary>          ...