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是一种轻量级的数据交换格式.可以解决数据库中文存储问题,对 ...
随机推荐
- jdbc配置及使用测试
源码:https://github.com/xiaostudy/jdbc_test1 这是没有使用连接池的 目录 创建的sql语句create.sql DROP TABLE IF EXISTS t_u ...
- Spring mybatis源码篇章-Mybatis主文件加载
通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-SqlSessionFactory 前话 本文承接前文的内容继续往下扩展,通过Spring与Mybatis的 ...
- String类基础的那些事!
第三阶段 JAVA常见对象的学习 第一章 常见对象--String类 (一) String 类的概述及其构造方法 (1) 概述 多个字符组成的一串数据,例如 "abc" 也可以看成 ...
- 【AtCoder】AGC034
AGC034 刷了那么久AtCoder我发现自己还是只会ABCE(手动再见 A - Kenken Race 大意是一个横列,每个点可以跳一步或者跳两步,每个格子是空地或者石头,要求每一步不能走到石头或 ...
- Centos7下关闭Firewalls配置iptables
在网上搜索了很多这种资料,现在总结一下以备后用. 1.关闭防火墙:sudo systemctl stop firewalld.service 2.关闭开机启动:sudo systemctl disab ...
- Kubernetes---Pod hook
Pod hook(钩子)是由Kubernetes管理的kubelet发起的,当容器中的进程启动前或者容器中的进程终止之前运行,这是包含在容器的生命周期之中.可以同时为Pod中的所有容器都配置 hook ...
- Fiddler 抓包工具详解
Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的小功能 ...
- 轻松搭建CAS 5.x系列(2)-搭建HTTPS的SSO SERVER端
概要说明 CAS要求,必须使用HTTPS的服务,否则就只等实现登录,无法实现单点登录.科普下HTTPS,网站有HTTP和HTTPS两种协议.HTTP是浏览器到网站之间是明文传输,比如你输入帐号名和密码 ...
- javascript——HTML对象
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 小程序点击图片,png转jpg,再预览方法
//页面数据初始化添加参数:isSignCanvassShow //通过canvas将图片转为jpg,使图片生成白色底便于查看预览 //list为原图片数组列表,index表示当前图片下标, //im ...