python教程(六)·字符串
我们已经学习了字符串的使用方法,我们还学习了使用索引和分片操作字符串,经历了这么长的时间,相信大家也有所掌握;本节将讨论并学习字符串的格式化与字符串的常用方法
字符串格式化
字符串是序列的一种,所以所有的通用序列操作当然都适用啦,这里就不再重复了,下面我们来探讨字符串的格式化
何为字符串格式化?字符串格式化就是指把数据按照一定的格式组成一个字符串,这貌似很难说清楚,下面来看个例子:
现有下列变量:
year = 2018
month = 3
day = 9
我们要输出格式为“年|月|日”的字符串,那么我们可以使用加号+来进行拼接字符串:
output = str(year) + '|' + str(month) + '|' + str(day)
print(output)
我们将year、month、day三个变量按照一定的格式组成了一个字符串,这样的过程就可以称为字符串格式化。
然而,今天我们来探讨的不是以这种拼接方式实现的字符串格式化,而是以用数据填充模板的方式来实现,也就是我们给出一个模板“年|月|日”,我们只需要提供三个值,年、月、日,然后就生成我们想要的字符串。
python支持的字符串格式方式有两种,下面来一一介绍
传统方式
第一种字符串格式化使用百分号%来实现,在%的左边是格式化字符串,也就是我们的模板,右边是我们用来格式化的数据(元组类型),也就是用来填充的值,举例如下:
>>> year = 2018
>>> month = 3
>>> day = 9
>>> output = '%s|%s|%s' % (year, month, day)
>>> print(output)
2018|3|9
>>>
模板字符串中的%s叫做转换说明符,也叫占位符,就是用来占着位置,等待被替换成提供的值,s表示这个位置将替换成字符串,如果值不是字符串,就使用str函数转换成字符串,完整的转换说明符,由以下部分按顺序组成:
%字符:这是转换说明符的开始- 转换标志(可选):
-表示左对齐,+表示在数值前加上正负号,空格表示正数之前保留空格,0表示转换值后位数不足就用0填充 - 最小字段宽度(可选):转换后的值不能短于该值指定的宽度,如果该位置写的是
*,则宽度由%右边的元组提供 - 点
.后跟精度值(可选):如果转换的是浮点数,精度值就表示小数点后的位数,如果转换的是字符串,精度值就表示最大的字段宽度,如果为*,那么该值由%右边的元组提供 - 转换类型:看下表:
| 转换类型 | 含义 | 例子 |
|---|---|---|
| d或i | 有符号的十进制整数 | '%d' % 123 => '123' |
| o | 无符号的八进制整数 | '%o' % 8 => '10' |
| u | 无符号十进制整数 | '%u' % 123 => '123' |
| x | 无符号十六进制整数(小写) | '%x' % 123 => '7b' |
| X | 无符号十六进制整数(大写) | '%x' % 123 => '7B' |
| e | 科学计数法表示的浮点数(小写) | '%e' % 123.456 => '1.234560e+02' |
| E | 科学计数法表示的浮点数(小写) | '%E' % 123.456 => '1.234560E+02' |
| f,F | 十进制浮点数 | '%f' % 123.456 => '123.456000'、'%F' % 123.456 => '123.456000' |
| g | 如果指数大于-4或者小于精度值则和e相同,其它情况与f相同 | 略 |
| G | 如果指数大于-4或者小于精度值则和E相同,其它情况与F相同 | 略 |
| c | 单字符串(ASCII码值或则单字符字符串) | '%c' % 65 => 'A'、'%c' % 'a' => 'a' |
| r | 字符串(使用repr函数转换任意python对象) | 'hello %r!' % 'world' => "hello 'world'!" |
| s | 字符串(使用str函数转换任意python对象 | 'hello %s!' % 'world' => 'hello world!' |
看到这个表相信大家都晕了,告诉大家一个秘密,我从来没有记住这个表!⊙▽⊙
因为一般来说,大多数的值都是可以转换成字符串的,所以最常用的转换说明符也就一个%s。(~ ̄▽ ̄)~
虽然不需要记住那么多的转换类型,但有些细节还是要记住的!
字段宽度和精度
字段宽度是转换后的值所占的最少字符个数,精度就是转换后的小数位数(对于浮点数),或者转换后最大字符个数(对于字符串),这两个参数都是整数或者星号*,它们之间用点.分隔(如果只指定宽度不指定精度就不必要使用点.),举例如下:
>>> '%9f' % 1.0 # 字段宽度为9
' 1.000000'
>>> '%9.1f' % 1.0 # 字段宽度为9精度为1
' 1.0'
>>> '%.2f' % 1.1 # 精度为2
'1.10'
可以看到,转换后的字符串宽度不足时,默认在左边用空格填充
使用星号*的时候,需提供相应的宽度或精度:
>>> '%.*s' % (5, 'hello world!') # 精度为5
'hello'
标志
紧接着%,我们可以使用一个标志,这个标志可以是0、+、-或者空格
0表示数字的填充符使用0:>>> '%09f' % 1.0
'01.000000'
+表示给数值加上正负号:>>> '%+d' % 12
'+12'
>>> '%+d' % -12
'-12'
-表示左对齐数值:>>> '%-9f' % 1.0
'1.000000 '
- 空格表示在正数前加上空格:
>>> '% d' % 12
' 12'
>>> '% d' % -12
'-12'
补充:%%表示百分号%本身
学过C语言的都知道,这种传统的字符串格式化方式和C语言的字符串格式化方式大同小异,但是这种方式正逐渐被python抛弃,python官方推荐下面这种新的字符串格式化方式
更先进的方式
python的字符串有一个format方法,这个方法正是使用新版字符串格式化的渠道,下面是用法:
基本用法:使用{}做占位符,按顺序填充参数:
>>> 'hello {}, I am {}'.format('world', 'Lee')
'hello world, I am Lee'
使用数字指定参数的位置(从0开始):
>>> 'Between {0} and {1}, I like {0}'.format('apple', 'banana')
'Between apple and banana, I like apple'
使用关键字参数指定参数:
>>> 'I am {name}, and my age is {age}.'.format(name='Lee', age=18)
'I am Lee, and my age is 18.'
>>> d = {'name': 'Lee', 'age': 18} # 使用字典
>>> 'I am {name}, and my age is {age}.'.format(**d) # 展开字典
'I am Lee, and my age is 18.'
还可以通过列表索引来指定参数:
>>> lst = ['Lee', 18]
>>> 'I am {0[0]}, and my age is {0[1]}.'.format(lst)
'I am Lee, and my age is 18.'
花括号{}中使用冒号:分隔,左边指定字段名(数字,关键字等),右边按顺序指定:
- 填充字符:用于填充的字符,默认为空格
- 对齐方式 :
^居中<左对齐>右对齐
- 正负号:
+给数字加上正负号-只给负数加上负号(默认)- 空格 给正数加上空格
- 宽度:指定最小字段宽度,以0开始表示用0填充
- 精度:在宽度字段后添加一个点
.再写此字段,表示小数点后的位数(对于浮点数),或者最大字段宽度(对于字符串) - 转换类型:大致与传统方式相同
补充:两个{表示{本身,两个}表示}本身。
读者可以参照这篇文章,写得比较详细:Python 中 str.format() 方法详解
字符串方法
了解了这么多的字符串格式化方式,该介绍几个字符串常用方法了。
要记住字符串是不可变的,所以下面介绍到的方法都不会改变原来的字符串!
find
find方法用于在一个字符串中查找一个子串,返回第一个匹配字串的首字符索引,如果没有找到就返回-1,举例如下:
>>> 'hello Lee'.find('Lee')
6
>>> 'hello Lee'.find('jack')
-1
还可以指定查找的起点、终点(不包含):
>>> s = 'hello Lee'
>>> s.find('Lee', 7) # 指定起点
-1
>>> s.find('Lee', 0, 9) # 指定起点和终点
6
replace
replace方法用于返回替换后的字符串,如:
>>> 'hello world!'.replace('world', 'Lee') # 用'Lee'替换'world'
'hello Lee!'
translate
和replace方法类似,但是可以同时替换多个字符,用法如下:
>>> table = str.maketrans('hw', 'HW') # 制作映射表,h=>H,w=>W
>>> table
{104: 72, 119: 87}
>>> 'hello world'.translate(table)
'Hello World'
strip
该方法用于去除两侧指定的字符串(默认为空白符,即空格、制表符、换行符等),如:
>>> ' hello world '.strip()
'hello world'
>>> '**hello world***'.strip('*')
'hello world'
补充:lstrip只作用于字符串左端,rstrip只作用于字符串右端
split和join
split方法用来讲字符串分割成序列,如:
>>> s = 'Guangdong, Zhejiang, Shanghai'
>>> s.split(',') # 用逗号','作为分割符
['Guangdong', ' Zhejiang', ' Shanghai']
>>> s.split() # 默认使用空白符(空格、制表符、换行符等)作为分割符
['Guangdong,', 'Zhejiang,', 'Shanghai']
>>> s.split(',', 1) # 分割1次
['Guangdong', ' Zhejiang, Shanghai']
补充:rsplit从右边开始分割
join用于将序列连接成字符串,如:
>>> ','.join(['hello', 'world'])
'hello,world'
lower和upper
lower方法和upper方法分别返回转换成小写和大写的字符串,如:
>>> 'AbcD'.lower()
'abcd'
>>> 'AbcD'.upper()
'ABCD'
本节内容较多,好好消化吧!
不知道下一次有时间更新又是什么时候咯 ヾ( ̄▽ ̄)Bye~Bye~
python教程(六)·字符串的更多相关文章
- Python 1-5】Python教程之——字符串
字符串或串(String)是由数字.字母.下划线组成的一串字符. 字符串 字符串就是一系列字符.在Python中,用引号括起的都是字符串,其中的引号可以是单引号, 也可以是双引号,如下所示: &quo ...
- 简明python教程六----编写一个python脚本
备份程序: #!/usr/bin/python #Filename:backup_ver1.py import os import time source = ['/home/liuxj/python ...
- PySide——Python图形化界面入门教程(六)
PySide——Python图形化界面入门教程(六) ——QListView和QStandardItemModel 翻译自:http://pythoncentral.io/pyside-pyqt-tu ...
- Python教程(2.4)——字符串
2.2节讲过,Python中有字符串类型.在Python中,字符串用'或"括起,例如'abc'."qwerty"等都是字符串.注意'和"并不是字符串的内容. A ...
- Python API快餐教程(1) - 字符串查找API
字符串处理相关API 字符串是7种序列类型中的一种. 除了序列的操作函数,比如len()来求字符串长度之外,Python还为字符串提供丰富到可以写个编辑器的API. 查找类API 首先,下面的查找AP ...
- 《简明python教程》笔记一
读<简明Python教程>笔记: 本书的官方网站是www.byteofpython.info 安装就不说了,网上很多,这里就记录下我在安装时的问题,首先到python官网下载,选好安装路 ...
- python教程(零)·前言
本教程是作者根据自己学习python的经验写下的,一来是想将经验分享给对python同样感兴趣的小白(大神请忽略),二来是想借此加深本人对python的理解,温故而知新. 学习基础 本教程面向的读者, ...
- python入门灵魂5问--python学习路线,python教程,python学哪些,python怎么学,python学到什么程度
一.python入门简介 对于刚接触python编程或者想学习python自动化的人来说,基本都会有以下python入门灵魂5问--python学习路线,python教程,python学哪些,pyth ...
- python教程与资料
网上有个人写的python快速教程,非常好.比看书好多了.猛击下面的链接地址 http://www.douban.com/group/topic/30008503/ python文档资料收集 pyth ...
随机推荐
- Docker相关连接
docker-compose文档:https://docs.docker.com/compose/compose-file/ dockerfile文档:https://docs.docker.com/ ...
- Tuxedo安装、配置、以及演示样例程序 (学习网址)
Tuxedo安装.配置.以及演示样例程序 (学习网址): 1.http://liu9403.iteye.com/blog/1415684 2.http://www.cnblogs.com/fnng/a ...
- docker容器修改hosts文件,重启失效问题解决
docker容器修改hosts文件 搜了一大批资料,有说需要在docker run --hosts...改:dockerfile改:有点麻烦,下面方案比较好: 参照docker吧(https://ti ...
- ZT 设计模式六大原则(2):里氏替换原则
设计模式六大原则(2):里氏替换原则 分类: 设计模式 2012-02-22 08:46 23330人阅读 评论(41) 收藏 举报 设计模式class扩展string编程2010 肯定有不少人跟我刚 ...
- [COGS 2066]七十和十七
2066. 七十和十七 ★★★ 输入文件:xvii.in 输出文件:xvii.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 七十君最近爱上了排序算法,于是Ta ...
- 初进MFC的世界,太奇妙。第六次作业----未完待续
又一次的迁徙.我希望能够早些抵达. 第六次作业-未完待续!图形界面,计算器文件 本次的作业是给自己的计算器加一个可视化的窗口,我开始也是很激动和憧憬的,看了很多的界面库,发现并没有想象的那么简单,因为 ...
- python一键对应多个值
背景:目前是想让一个取出来的数据,数据有2个或多个值,对应一个key,或者这样说:让一个键对应2个值或者3个值 实现方式,如下:目前我以读取xml文件为案例,读取xml中两个配置文件,存放到一个key ...
- Pygame播放声音与音效
简单学习自小甲鱼视频教学(笔记) 实现功能: 运行后自动播放背景音乐,单击左键播放音效①,单击右键播放音效②, 空格键控制暂停背景音乐与恢复背景音乐,并且实现播放图标的切换. 代码如下: import ...
- 网络Socket编程(简易qq实现之C/S通信1)
1. 目标:实现两个用户之间的通信,利用的是简单的Socket知识以及简略界面 2. 界面:分为客户端与服务器端(如下图) 3. 基本功能:客户端先向服务器端发送一个消息,这样就可以让客户端与服务器端 ...
- tomcat多实例.md
多tomcat实例 环境说明 操作系统:CentOS 6.6 JDK: # ll /usr/local/java lrwxrwxrwx 1 root root 22 Feb 27 17:43 /usr ...