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是一种轻量级的数据交换格式.可以解决数据库中文存储问题,对 ...
随机推荐
- HDFS 读/写数据流程
1. HDFS 写数据流程 客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件, NameNode 检查目标文件是否已存在,父目录是否存在: NameNo ...
- 多线程学习:win32多线程编程基本概念(转)
一.定义: 1.进程和线程的区别 进程:是程序的执行过程,具有动态性,即运行的程序就叫进程,不运行就叫程序 ,每个进程包含一到多个线程.线程:系统中的最小执行单元,同一进程中有多个线程,线程可以共享资 ...
- ~ android与ios的区别
Oracle与Mysql的区别 项目类别 android ios 应用上 可以使用常用的android模拟器,来模拟各种android设备 只能直接使用iphone或ipad进行测试 开发语言 基于L ...
- 前端工程师应该知道的yarn知识
yarn 是在工作中离不开的工具,但在工作中,很多人基本只会使用 yarn install,而且会手动删除 node-modules,或删除 yarn.lock 文件等不规范操作.本文将从一些基础的知 ...
- C++反汇编第四讲,认识多重继承,菱形继承的内存结构,以及反汇编中的表现形式.
目录: 1.多重继承在内存中的表现形式 多重继承在汇编中的表现形式 2.菱形继承 普通的菱形继承 虚继承 汇编中的表现形式 一丶多重继承在内存中的表现形式 高级代码: class Father1 { ...
- LeetCode 899. Orderly Queue
899. Orderly Queue(有序队列) 题目: 给出了一个由小写字母组成的字符串 S.然后,我们可以进行任意次数的移动. 在每次移动中,我们选择前 K 个字母中的一个(从左侧开始),将其从原 ...
- Python占位符使用总结
格式化对象为字符串:%s myName=input('Enter your name:') userAge=input('Enter your age:') userHight=input('Ente ...
- OneinStack – 一键PHP/JAVA安装工具
https://oneinstack.com/ OneinStack包含以下组合:lnmp(Linux + Nginx+ MySQL+ PHP) lamp(Linux + Apache+ MySQL+ ...
- CPU vector operations
CPU vector operations 原文:https://blog.csdn.net/wangeen/article/details/8602028 vector operations 是现代 ...
- TCP面向字节流和UDP面向报文的区别
TCP面向字节流 打个比方比喻TCP,你家里有个蓄水池,你可以里面倒水,蓄水池上有个龙头,你可以通过龙头将水池里的水放出来,然后用各种各样的容器装(杯子.矿泉水瓶.锅碗瓢盆)接水. 上面的例子中,往水 ...