Python 字符串 (3) 持续更新
字符串操作
虽然字符串也是一种序列,但是它和元组一样,不可变的。当你想对它修改时,会引发异常。如
>>> 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) 持续更新的更多相关文章
- LeetCode python实现题解(持续更新)
目录 LeetCode Python实现算法简介 0001 两数之和 0002 两数相加 0003 无重复字符的最长子串 0004 寻找两个有序数组的中位数 0005 最长回文子串 0006 Z字型变 ...
- LeetCode 题目的 Python 实现(持续更新中)
Python-LeetCode 是一个使用 Python 语言解决 LeetCode 问题的代码库,库有以下几个方面需要注意: 所有题目都是 AC 的: 按照题目顺序,每 50 个放在一个目录下,方便 ...
- Python相关工具清单[持续更新]
SublimeJEDI : awesome Python autocompletion with SublimeText. Awesome Python : A curated list of awe ...
- Python 字典 (4) 持续更新
字典一种用名字来引用值的数据结构,这种数据结构称为 映射(mapping) .字典中的键可以是数字.字符串和元组. 字典 创建和使用 创建 phonebook = {'Aaron':133000000 ...
- python笔记(持续更新)
1.编译python遇到下面的编码问题: SyntaxError: Non-ASCII character '\xe9' in file E:\projects\learn.py on lin ...
- python tips(持续更新中)
python tips 可变对象与不可变对象 在python中,可变对象有数值类型(int,float),字符串(str),元组(tuple),可变对象有列表(list),字典(dict),集合(se ...
- Python小练习(持续更新....)
最近一直在学习python,这些小练习有些是书上的,有些是别人博客上的! # 1.题目1# 给一个字符串,统计其中的数字.字母和其他类型字符的个数:# 比如输入“124mid-=”,输出:数字=3,字 ...
- python内置模块笔记(持续更新)
常用函数name = '{wh}my \t name is {name},age is {age}.' print(name.capitalize()) # 字符串的开头字母大写 print(name ...
- python tips(持续更新)
1. 引用上一层目录 import syssys.path.append('..')import xx 2. python json JSON是一种轻量级的数据交换格式.可以解决数据库中文存储问题,对 ...
随机推荐
- Mysql 索引失效场景
例如:一张USER表 有字段属性 name,age 其中name为索引 下面列举几个索引失效的情况 1. select * from USER where name=‘xzz’ or age= ...
- 导出远程oracle数据库到本地
1.以管理员身份运行 Net Manager 以管理员身份运行cmd
- vs code在打开新文件是覆盖上一个窗口的问题
设置里面有个 enablePreview 去掉就好
- Dijstra_优先队列_前向星
Dijstra算法求最短路径 具体实现方式 设置源点,将源点从原集u{}中取出并放入新建集s{} 找出至源点最近的点q从原集取出放入新集s{} 由q点出发,更新所有由q点能到达的仍处于原集的点到源点的 ...
- 关于JS原型以及原型链、instanceof的一些理解
一.JS原型 首先要区分两个概念 1.构造函数 2.实例:由构造函数通过new方式创建出来的就是实例 <script> function Foo() { } var f = new Foo ...
- python 入门(基础)
1. python的常见数据类型(str , list ,dict,set) str (字符串的操作方法) astr = " Hello Workd " astr.strip() ...
- 并不对劲的CSP-S2019
day1 对题的第一印象: t1:颇有"小凯的疑惑"之风(赛后发现确实如此,因为最好写的正解也可以直接输出) t2:log方会被卡吧?好像倍增一个log?(赛后发现有很好写的线性做 ...
- axios 跨域携带cookie设置
import axios from 'axios' // 创建axios实例 const service = axios.create({ baseURL: process.env.BASE_API, ...
- Java实现发邮件功能---网易邮箱
目录 Java实现发邮件功能 前言 开发环境 代码 效果 结束语 Java实现发邮件功能 前言 电子邮件的应用场景非常广泛,例如新用户加入,即时发送优惠清单.通过邮件找回密码.监听后台程序,出现异常自 ...
- Node.js学习(2)-使用模板引擎art-template
node 安装cnpm i -S art-template 加载require('art-template') template.render接收的是字符串