字符串操作

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

>>> 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. Mysql 索引失效场景

    例如:一张USER表   有字段属性 name,age   其中name为索引 下面列举几个索引失效的情况 1. select * from USER where name=‘xzz’ or age= ...

  2. 导出远程oracle数据库到本地

    1.以管理员身份运行 Net Manager 以管理员身份运行cmd

  3. vs code在打开新文件是覆盖上一个窗口的问题

    设置里面有个 enablePreview 去掉就好

  4. Dijstra_优先队列_前向星

    Dijstra算法求最短路径 具体实现方式 设置源点,将源点从原集u{}中取出并放入新建集s{} 找出至源点最近的点q从原集取出放入新集s{} 由q点出发,更新所有由q点能到达的仍处于原集的点到源点的 ...

  5. 关于JS原型以及原型链、instanceof的一些理解

    一.JS原型 首先要区分两个概念 1.构造函数 2.实例:由构造函数通过new方式创建出来的就是实例 <script> function Foo() { } var f = new Foo ...

  6. python 入门(基础)

    1. python的常见数据类型(str , list ,dict,set) str (字符串的操作方法) astr = " Hello Workd " astr.strip() ...

  7. 并不对劲的CSP-S2019

    day1 对题的第一印象: t1:颇有"小凯的疑惑"之风(赛后发现确实如此,因为最好写的正解也可以直接输出) t2:log方会被卡吧?好像倍增一个log?(赛后发现有很好写的线性做 ...

  8. axios 跨域携带cookie设置

    import axios from 'axios' // 创建axios实例 const service = axios.create({ baseURL: process.env.BASE_API, ...

  9. Java实现发邮件功能---网易邮箱

    目录 Java实现发邮件功能 前言 开发环境 代码 效果 结束语 Java实现发邮件功能 前言 电子邮件的应用场景非常广泛,例如新用户加入,即时发送优惠清单.通过邮件找回密码.监听后台程序,出现异常自 ...

  10. Node.js学习(2)-使用模板引擎art-template

    node 安装cnpm i -S art-template 加载require('art-template') template.render接收的是字符串