字符串操作

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

>>> 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. 后端根据查询条件生成excel文件返回给前端,vue进行下载

    一.HTML代码 <el-col :xs="2" :md="2" :sm="3"> <el-button type=&qu ...

  2. 在vue的element图片的上传及回调

    首先声明,本人用的是element组件写的图片的上传及回调,若非element本方法暂不支持. 下面开始正式讲图片的上传及回调.(本篇拒绝一切花里胡哨,都是干活,言辞粗糙,望请见谅) 1,elemen ...

  3. 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用

    目录 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用 21.1 read命令键盘读取变量的值 21.1.1 read常用见用法及参数 21.2 流程控制语句if 21.2 ...

  4. [知乎]这可能是最全面的龙芯3A3000处理器评测

    这可能是最全面的龙芯3A3000处理器评测 第一千零一个人   已关注 蓬岸 Dr.Quest . https://zhuanlan.zhihu.com/p/50716952 这里面链接很全. 立党 ...

  5. 实时监控服务器某个端口状态TCPing

    在给客户做运维服务期间,发现了一个奇怪的现象:备份系统(第三方国产)告警日志显示,每天晚上备份服务器的客户端在3点左右离线然后上线,再离线再上线,每晚两次,很是诡异. 联系了厂家技术支持,前后花了两天 ...

  6. oracle杀死正在执行的进程

    1 查询目前正在执行的终端和进程, SELECT /*+ rule */ s.username,decode(l.type,'TM','TABLE LOCK','TX','ROW LOCK',NULL ...

  7. Mysql解析json字符串/数组

    1 Mysql解析json字符串  解决方法:JSON_EXTRACT(原字段,'$.json字段名') 执行SQL: SELECT JSON_EXTRACT( t.result,'$.row'), ...

  8. Centos7查看关闭防火墙

    查看防火墙状态: firewall-cmd --state 关闭防火墙 service firewalld start 开机启动 service firewalld stop 禁止开机启动 syste ...

  9. Kubernetes---容器的生命周期

    ⒈ ⒉Init容器 介绍: Pod 能够具有一个或多个容器,应用运行在容器里面,但是它也可能有一个或多个先于应用容器启动的Init容器. Init容器与普通的容器非常像,除了如下两点: >Ini ...

  10. RMI(远程方法调用)

    Remote Method Invocation  跨虚拟机间调用 使用 RMI 技术可轻松将 服务提供者(Service Provider)与 服务消费者(Service Consumer)进行分离 ...