python之使用字符串

3.2字符串格式化使用字符串格式化操作符即百分号%来实现

>>>format = "hello,%s.%s enough for ya?"

>>>values = (‘world‘,‘Hot‘)

>>>print format % values

hello,world.Hot enough for ya?

>>>

格式化字符串的%s部分称为转换说明符,它们标记了需要插入转换值的位置.s表示值会被格式化为字符串----如果不是字符串,则会用str将其转换为字符串.

如果要格式化字符串字符串里面包括百分号,那么必须使用%%

如果格式化实数,可以使用f说明符类型,同时提供所需要的精度

>>> format = "pi with three decimals:%.3f"

>>> from math import pi

>>> print format % pi

pi with three decimals:3.142

>>>

string模块提供另外一种格式化值得方法:模板字符串.它的工作方式类似于很多unix shell里的变量替换.substitute这个模板方法会用传递进来的关键字参数foo替换字符串中的$foo

>>> from string import Template

>>> s = Template(‘$x,glorious $x!‘)

>>> s.substitute(x=‘slurm‘)

‘slurm,glorious slurm!‘

>>>

如果替换字段是单词的一部分,那么参数名就必须用括号起来,从而准确指明结尾:

>>> s = Template("It‘s ${x}tastic!")

>>> s.substitute(x=‘slurm‘)

"It‘s slurmtastic!"

>>>

可以使用$$插入美元符号:

>>> s = Template("Make $$ selling $x!")

>>> s.substitute(x=‘slurm‘)

‘Make $ selling slurm!‘

>>>

除了关键字参数之外,还可以使用字典变量提供值/名称对:

>>> s = Template(‘A $thing must never $action.‘)

>>> d = {}

>>> d[‘thing‘] = ‘gentleman‘

>>> d[‘action‘] = ‘show his socks‘

>>> s.substitute(d)

‘A gentleman must never show his socks.‘

>>>

3.3字符串格式化:完整版

格式化操作符的右操作数可以是任何东西,如果是元组或映射类型,那么字符串格式化将会有所不同.

如果需要转换的元组作为转换表达式的一部分存在,那么必须将它用圆括号括起来,以避免出错.

>>> ‘%s plus %s equals %s‘ % (1,1,2)

‘1 plus 1 equals 2‘

>>>

1.%字符:标记转换说明符的开始

2.转换标志:-表示左对齐;+表示在转换值之前要加上正负号;""表示正数之前保留空格;0表示转换值若位数不够则用0填充

3.最小字段宽度:转换后的字符串至少应该具有该值指定的宽度.如果是*.则宽度会从值元组中读出.

4.点(.)后跟精度值:如果转换的是实数,精度值就表示出现在小数点后的位数.如果转换的是字符串,那么该数字就表示最大字段宽度.如果是*,那么精度将会从元组中读出

5.转换类型 见书  3-1 表

3-1-1简单转换

>>> ‘Price of eggs:$%d‘ % 42

‘Price of eggs:$42‘

>>> ‘Hexadeciaml price of eggs: %x‘ % 42

‘Hexadeciaml price of eggs: 2a‘

>>> from math import pi

>>> ‘Pi:%f...‘ % pi

‘Pi:3.141593...‘

>>> ‘Very inexact estimate of pi: %i‘ %pi

‘Very inexact estimate of pi: 3‘

>>> ‘Using str: %s‘ % 42L

‘Using str: 42‘

>>> ‘Using repr: %s‘ % 42L

‘Using repr: 42‘

>>>

3.3.2字段宽度和精度

转换说明符可以包括字段宽度和精度.字段宽度是转换后的值所保留的最小字符个数,精度则是结果中应该包含的小数位数,或者是转换后的值所能包含的最大字符个数

>>> ‘%10f‘ % pi  字段宽10

‘  3.141593‘

>>> ‘%10.2f‘ % pi 字段宽10  精度2

‘      3.14‘

>>> ‘%.2f‘ % pi  精度2

‘3.14‘

>>> ‘%.5s‘ % ‘Guido van Rossum‘

‘Guido‘

可以使用* 作为字段宽度或精度,此时数值会从元组参数中读出:

>>> ‘%.*s‘ % (5, ‘Guido van Rossum‘)

‘Guido‘

>>> ‘%*.*s‘ % (10,5, ‘Guido van Rossum‘)

‘     Guido‘

>>>

3.3.3符号,对其和0填充

>>> ‘%010.2f‘  % pi

‘0000003.14‘

>>>

3-1字符串格式化示例

#!/usr/bin/env python

width = input(‘Please enter width:‘)

price_width = 10

item_width = width - price_width

header_format = ‘%-*s%*s‘

format = ‘%-*s%*.2f‘

print ‘=‘ * width

print header_format % (item_width,‘Item‘,price_width,‘Price‘)

print ‘-‘ * width

print format % (item_width,‘Apples‘,price_width,0.4)

print ‘=‘ * width

3.4字符串方法

尽管字符串方法完全来源于string模块,但是这个模块还包括一些不能作为字符串方法使用的常量和函数.maketrans函数就是其中之一,后面会将它和translate方法一起介绍,下面是一些有用的字符串常量

string.digits:包括数字0~9的字符串

string.letters:包含所有字母的字符串

string.lowercase:包含所有小写字母的字符串

string.printable:包含所有可打印字符的字符串

string.punctuation:包含所有标点的字符串

string.uppercase:包含所有大写字母的字符串

3.4.1 find

find方法可以在一个较长的字符串中查找子字符串。它返回子串所在位置的最左端索引。如果没有找到则返回-1

>>> ‘With a moo-moo here,and a moo-moo there‘.find(‘moo‘)

7

>>> title = "Monty Python‘s Flying Circus"

>>> title.find(‘Monty‘)

0

>>> title.find(‘Python‘)

6

>>> title.find(‘Flying‘)

15

>>> title.find(‘Zirquss‘)

-1

>>>

可选的起始点和结束点参数

>>> subject = ‘$$$ Get rich now!!! $$$‘

>>> subject.find(‘$$$‘)

0

>>> subject.find(‘$$$‘,1)

20

>>> subject.find(‘!!!‘)

16

>>> subject.find(‘!!!‘,0,16)

-1

>>>

3.4.2 join

join方法是非常重要的字符串方法,它是split方法的逆方法,用来在队列中添加元素。

>>> seq = [‘1‘,‘2‘,‘3‘,‘4‘,‘5‘]

>>> sep.join(seq)

‘1+2+3+4+5‘

>>>

>>> dirs = ‘‘,‘usr‘,‘bin‘,‘env‘

>>> ‘/‘.join(dirs)

‘/usr/bin/env‘

>>> print ‘C:‘ + ‘\\‘.join(dirs)

C:\usr\bin\env

>>>

需要添加的队列元素都必须是字符串。

3.4.3 lower

lower方法返回字符串的小写字母版

>>> ‘Trondheim Hammer Dance‘.lower()

‘trondheim hammer dance‘

>>>

>>> name = ‘Gumby‘

>>> names = [‘gumby‘,‘smith‘,‘jones‘]

>>> if name.lower() in names: print ‘Found it‘

...

Found it

>>>

另一个string模块的capwords函数

>>> string.capwords("that‘s all,folks")

"That‘s All,folks"

>>>

3.4.4 replace

replace方法返回某字符串的所有匹配项均被替换之后得到字符串

>>> ‘This is a test‘.replace(‘is‘,‘eez‘)

‘Theez eez a test‘

>>>

3.4.5 split

这是一个非常重要的字符串方法,它是join的逆方法,用来将字符串分割成序列

>>> ‘1+2+3+4+5‘.split(‘+‘)

[‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘]

>>> ‘/usr/bin/env‘.split(‘/‘)

[‘‘, ‘usr‘, ‘bin‘, ‘env‘]

>>> ‘Using the default‘.split()

[‘Using‘, ‘the‘, ‘default‘]

>>>

3.4.6 strip

返回除两侧空格的字符串:

>>> ‘        inernal whitespace is kept            ‘.strip()

‘inernal whitespace is kept‘

>>>

它和lower方法一起使用的话就可以很方便的对比输入的和存储的值.让我们回到lower部分中的用户名的例子,假设用户在输入名字时无意中在名字后面加上了空格:

>>> names = [‘gumby‘,‘smith‘,‘jones‘]

>>> name = ‘gumby ‘

>>> if name in names : print ‘Found it‘

...

>>> if name.strip() in names: print ‘Found it‘

...

Found it

>>>

也可以指定需要去除的字符,将它们列为参数即可.

>>> ‘***SPAM*for*everyone!!!***‘.strip(‘*!‘)

‘SPAM*for*everyone‘

>>>

3.4.7 translate

translate方法和replace方法一样,可以替换字符串中的某些部分,但是和前者不同的是,translate方法只处理单个字符.它的优势在于可以同时进行多个替换,有些时候比replace效率高的多.

在使用translate转换之前,需要先完成一张转换表.转换表中是以字符替换某字符的对应关系.因为这个表有多达256个项目,我们还是不要自己写了,使用string模块里面的maketrans函数就行.

maketrans函数接受两个参数:两个等长的字符串,表示第一个字符串中的每个字符都用第二个字符串中相同位置的字符替换.

>>> from string import maketrans

>>> table = maketrans(‘cs‘,‘kz‘)

>>> len(table)

256

>>> table[97:123]

‘abkdefghijklmnopqrztuvwxyz‘    字母c和s  分别替换成kz

>>> maketrans(‘‘,‘‘)[97:123]

‘abcdefghijklmnopqrstuvwxyz‘

>>>

创建这个表以后,可以将它用作translate方法的参数,进行字符串的转换如下:

>>> ‘this is an incredible test‘.translate(table)

‘thiz iz an inkredible tezt‘

translate的第二个参数是可选的,这个参数是用来指定需要删除的字符.

>>> ‘this is an incredible test‘.translate(table,‘ ‘)

‘thizizaninkredibletezt‘

非英语字符串的问题

有些时候类似于lower这样的字符串方法并不能如我们所愿地进行工作.

时间: 2024-11-05 21:08:15

python之使用字符串的相关文章

python学习之 字符串前'r'的用法

python学习之 字符串前'r'的用法 在打开文件的时候open(r'c:\....') 加r和不加''r是有区别的 'r'是防止字符转义的 如果路径中出现'\t'的话 不加r的话\t就会被转义 而加了'r'之后'\t'就能保留原有的样子 在字符串赋值的时候 前面加'r'可以防止字符串在时候的时候不被转义 原理是在转义字符前加'\' 例: s=r'\tt' print(s) Output: '\tt' s='\tt' print(s) Output: '        t' python学习之

Python/C++ 对字符串的操作

字符串操作在任何语言中都很常用. 本文列举了一些常见的Python/c++ 对字符串的操作. c++ 的使用了boost libraray,  所涉及到的函数都在  <boost/algorithm/string.hpp> 中定义.   python  c++ 大小写转换 'str'.upper(),  'str'.lower() boost::to_upper('str'), boost::to_upper_copy('str') 字符串包含某个substr str.find(substr)

Python中文编码问题(字符串前面加&#39;u&#39;)

中文编码问题是用中文的程序员经常头大的问题,在python下也是如此,那么应该怎么理解和解决python的编码问题呢? 我们要知道python内部使用的是unicode编码,而外部却要面对千奇百怪的各种编码,比如作为中国程序经常要面对的gbk,gb2312,utf8等,那这些编码是怎么转换成内部的unicode呢? 首先我们先看一下源代码文件中使用字符串的情况.源代码文件作为文本文件就必然是以某种编码形式存储代码的,python默认会认为源代码文件是asci编码,比如说代码中有一个变量赋值: s

Python补充05 字符串格式化 (%操作符)

模板 格式化字符串时,Python使用一个字符串作为模板.模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的格式.Python用一个tuple将多个值传递给模板,每个值对应一个格式符. 比如下面的例子: print("I'm %s. I'm %d year old" % ('Vamei', 99)) 上面的例子中, "I'm %s. I'm %d year old" 为我们的模板.%s为第一个格式符,表示一个字符串.%d为第二个格式符,表示一个整数

Python中Unicode字符串

Python中Unicode字符串 字符串还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 - 255被用来表示大小写英文字母.数字和一些符号,这个编码表被称为ASCII编码,比如大写字母 A 的编码是65,小写字母 z 的编码是122. 如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且

python中的字符串,列表(list),元组,字典(Dictionary)

http://www.runoob.com/python/python-tutorial.html 字符串 var1 = 'Hello World!' 列表(list) list1 = ['physics', 'chemistry', 1997, 2000]; 元组 tup1 = ('physics', 'chemistry', 1997, 2000); 字典(Dictionary) d = {key1 : value1, key2 : value2 }

零基础学python-7.1 python中的字符串简介与常用函数

在python中,字符串变成了一个强大的处理工具集,他是不可变的,也就是说字符串包含字符与字符的顺序,他不可以原处修改 字符串是我们后面需要学习的稍大一点的对象类别--序列的第一个代表 在字符串章节所说到的关于序列的操作,后面的列表与元组一样适用 字符串常用的一些操作与函数 操作 解释 s='' 空字符串 s="abc'd" 双引号和单引号相同 s='abc\n' 转义序列,使用变量完全显示字符, 只有使用print函数才能够显示转义 s="""aaaaa

Python学习笔记整理(四)Python中的字符串..

字符串是一个有序的字符集合,用于存储和表现基于文本的信息. 常见的字符串常量和表达式 T1=‘’ 空字符串 T2="diege's" 双引号 T3="""...""" 三重引号块 T4=r'\temp\diege' Raw字符串 抑制(取消)转义,完全打印\tmp\diege,而没有制表符 T5=u’diege' Unicode字符串 T1+T2     合并 T1*3    重复 T2[i]    索引 T2[i:j] 分片

【原创】Python第二章——字符串

字符串是一个字符序列,(提醒:序列是Python的一个重要的关键词),其中存放UNICODE字符.Python中的字符串是不可变的(immutable),即对字符串执行操作时,总是产生一个新的字符串而不是修改现有的字符串. 字符串常量的表示 1. 3种表示 1 #单引号 2 A = 'Python' 3 #引号 4 B = "Python" 5 #三引号 6 C = """Python""" 2. 为什么要这么麻烦? (1)当

Python中的字符串处理

Python转义字符 在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符.如下表: 转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \' 单引号 \" 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n 换行 \v 纵向制表符 \t 横向制表符 \r 回车 \f 换页 \oyy 八进制数yy代表的字符,例如:\o12代表换行 \xyy 十进制数yy代表的字符,例如:\x0a代表换行 \other 其它的字符以普通格式输出 Python字符