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是一种轻量级的数据交换格式.可以解决数据库中文存储问题,对 ...
随机推荐
- POJ3259 Wormholes 【spfa判负环】
题目链接:http://poj.org/problem?id=3259 Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submis ...
- 学习笔记:CentOS7学习之十五: RAID磁盘阵列的原理与搭建
目录 学习笔记:CentOS7学习之十五: RAID磁盘阵列的原理与搭建 14.1 RAID概念 14.1.1 RAID几种常见的类型 14.1.2 RAID-0工作原理 14.1.3 RAID-1工 ...
- fcntl和flock两个系统调用的区别
总的来说,flock函数只能锁定整个文件,无法锁定文件的某一区域.而fcntl可以利用struct flock结构体,来实现文件里部分区域锁定的操作. 附:fcntl(文件描述词操作) 相关函数 op ...
- docker login Harbor时报错403 Forbidden
背景 在本地搭建了harbor后,在进行了相关配置后,还是报错:Error response from daemon: login attempt to http://10.xx.xx.xx:8000 ...
- 大话数据结构(8) 串的模式匹配算法(朴素、KMP、改进算法)
--喜欢记得关注我哟[shoshana]-- 目录 1.朴素的模式匹配算法2.KMP模式匹配算法 2.1 KMP模式匹配算法的主体思路 2.2 next[]的定义与求解 2.3 KMP完整代码 2.4 ...
- 网络流+最小生成树的最少割边数--How Many to Be Happy?
题意:https://blog.csdn.net/Ratina/article/details/95200594 思路: 首先我们知道最小生成树就是按长度枚举边,能连就连. 那么,如果这条边在最小生成 ...
- Ubuntu系统降内核
本人安装的Ubuntu16.04.6系统原生内核为4.15.0,但安装的应用仅支持4.8.0以下内核,因此需要降内核.PS:降内核有风险,操作前请慎重 1.查看可用的内核 输入命令查看已经可用的内核 ...
- 网站页面顶部出现空白行字符的原因以及完美解决办法
转自个人博客:https://www.hurbai.com 有时候网页头部会出现一个空白行,查看源码发现body开头初有一个非法字符 // 如果是Windows系统,修改为:$WIN = 1; $W ...
- 20190716-Python网络数据采集/第 2 章 复杂HTML解析
# P29/9# 解析,要考虑到可持续性问题,对方反爬修改后,仍继续有效,方为优秀代码# 解析一个目标网页前,需要做到以下几点:(1)明确目标内容:(2)寻找“打印此页”的链接,或查看网站有无HTML ...
- 第七章 ZYNQ-MIZ701 GPIO使用之EMIO
7.0难度系数★☆☆☆☆☆☆ 7.1硬件截图 7.1.1 PCB上的位置 7.1.1 PCB上的位置 7.2电路分析 本次实验用到的是LD_A0~LD_A3,管脚定义如下表所示. LD_A0:F17 ...