python7:字符串

在Python中,字符串对应对象str,字符串是使用Unicode编码的不可变序列。

构造字符串

字符串可以使用下面几种语法:

1)单引号:‘allows embedded "double" quotes‘

2)双引号:"allows embedded ‘single‘ quotes"

3)三引号:‘‘‘Three single quotes‘‘‘, """Three double quotes"""

三引号的字符串可以在多行扩展——所有空格都将被包含在字符串中,例如:

>>> '''three
single
qiptes'''
'three\nsingle\nqiptes'

对于单个表达式的一部分并且之间只有空格的字符串将被隐式地转换为单个字符串,例如:

>>> "spam " "eggs"
'spam eggs'

字符串也可以使用str构造器来构造:

class str(object=‘‘)

class str(object=b‘‘, encoding=‘utf-8‘, errors=‘strict‘)

str()返回一个字符串对象。如果object不提供,则默认返回空字符串,否则,str()的行为依赖于encoding或者errors是否提供:

1)encoding和errors都不提供,str(object)返回object.__str__(),用于表示object的字符串描述;对于字符串,就是它本身。如果对象没有__str__()方法,则返回repr(object);

2)encoding和errors其中一个被提供,object应该是一个bytes-like object(例如:bytes或者bytearray)。假如object是一个bytes(或者bytearray),那么str(bytes, encoding, errors)等价于bytes.decode(encoding, errors),否则,在调用bytes.decode()之前object下的字节对象将被获取。

注意未指定encoding或者errors的情况下对bytes对象使用str()相当于返回对象的描述信息,同1,如:

>>> str(b'test!')
"b'test!'"

下面看一个例子:

class StrTest():
    def __str__(self):
        return "this is StrTest"

print(str(StrTest()))

打印结果为:this is StrTest

字符串方法

字符串实现了所有序列的公共方法,并增加了许多额外的方法。

str.capitalize()

返回字符串的一个拷贝,第一个字符大写,其它字符小写。

str.casefold()

返回一个字符串的casefolded拷贝,casefolded字符串可以被用于caseless匹配。

Casefolding类似于小写,但是更进一步,因为它移除在字符串中的所有差异。例如,德语的小写字母对应于"ss",由于它已经是小写,所以lower()将不做任何事,但casefold()会将它转换为"ss"。

str.center(width[, fillchar])

返回长度为width的字符串,若width大于len(s),则用fillchar(默认空格)填充,并将s放在中心位置,如:

>>> s = 'test'
>>> s.center(10,'*')
'***test***'

str.count(sub[, start[, end]])

返回sub在str中出现的次数,可选参数start和end用于限制返回。

str.encode(encoding="utf-8", errors="strict")

返回一个使用encoding编码的bytes对象。

str.endswith(suffix[, start[, end]])

如果字符串以suffix结尾,则返回true,suffix可以是一个元组,只要其中一个元素匹配则返回true,例如:

>>> s = 'test'*4
>>> s.endswith('test')
True
>>> s.endswith(('test1','test2','test'))
True

str.expandtabs(tabsize=8)

返回一个str的拷贝,其中所有的tab字符被一个或者多个空格代替,依靠指定的tabsize,默认8。

>>> '01\t012\t0123\t01234'.expandtabs()
'01      012     0123    01234'
>>> '01\t012\t0123\t01234'.expandtabs(4)
'01  012 0123    01234'

str.find(sub[, start[, end]])

返回sub在str中被发现的最小索引,如果未发现则返回-1。

注意find应该只用于查询sub的位置,如果判断sub是否在字符串中,用in操作即可:

>>> 'Py' in 'Python'
True

str.format(*args, **kwargs)

执行字符串的格式化操作。使用该方法的字符串能够使用括号{}包含的替换域,每个替换域或者使用位置编号,或者使用变量名,返回字符串的拷贝,并且所有替换域都被替换。

>>> "The sum of 1 + 2 is {0}".format(1+2)
'The sum of 1 + 2 is 3'

str.format_map(mapping)

在3.2版本中添加,看下面的例子:

>>> class Default(dict):
	def __missing__(self, key):
		return key
>>> '{name} was born in {country}'.format_map(Default(name='Guido'))
'Guido was born in country'

str.index(sub[, start[, end]])

同find(),除了当子串未发现时抛出ValueError异常。

str.isalnum()

如果字符串中的所有字符都是字母数字,则返回true,只要一个字符非字母数字,则返回false。字符c是字母数字,表示以下方法的其中之一返回true:c.isalpha(),c.isdecimal(),c.isdigit()或者 c.isnumeric()。

str.isalpha()

如果字符串中的所有字符都是字母,则返回true。

str.isdecimal()

如果字符串中的所有字符都是十进制数字,则返回true。

str.isdigit()

如果字符串中的所有字符都是数字,则返回true。

str.isidentifier()

字符串是否是有效的标识符。

str.islower()

字符串中的所有字符都是小写,则返回true。

str.isnumeric()

如果字符串中所有的字符都是数字字符,则返回true。

str.isprintable()

如果字符串为空,或者字符串中的数字都是可打印的,则返回true。不可打印的字符包括unicode字符集中标注为"Other"和"Separator"的。

str.isspace()

如果字符串中全是空格,则返回true。

str.istitle()

如果字符串是title,则返回true,即首字母大写。

str.isupper()

如果字符串中字符全是大写,则返回true。

str.join(iterable)

返回iterable中元素联合的字符串,iterable中元素使用str分隔。如果iterable存在非str的元素,则抛出TypeError异常。

>>> s = 'Asss'
>>> s.join(['1','2','3','4'])
'1Asss2Asss3Asss4'

str.ljust(width[, fillchar])

返回一个做适配长度width的字符串,空白使用fillchar填充,如果字符串长度大于等于width,原始字符串被返回。

>>> s = '12345678'
>>> s.ljust(6)
'12345678'
>>> s.ljust(15)
'12345678       '
>>> s.ljust(15,'%')
'12345678%%%%%%%'

str.lower()

返回一个所有字符小写的str的拷贝。

str.lstrip([chars])

返回移除指定起始字符的str的拷贝,如果chars不指定,则默认移除空格。

>>> s = '   spaciout   '
>>> s.lstrip()
'spaciout   '
>>> s.lstrip('s')
'   spaciout   '
>>> s.lstrip(' s')
'paciout   '
>>> s.lstrip(' sp')
'aciout   '
>>> s.lstrip(' p')
'spaciout   '

static str.maketrans(x[, y[, z]])

静态方法,用于为str.translate()生成一个转换表。

如果只有一个参数,则参数必须为字典;如果两个参数,则必须是等长的字符串;如果为3个参数,则第三个参数必须为字符串,并且该字符串的字符将被匹配为None。

>>> str.maketrans({'a':'A','b':'B'})
{97: 'A', 98: 'B'}
>>> str.maketrans('abc','ABC')
{97: 65, 98: 66, 99: 67}
>>> str.maketrans('abc','ABC','def')
{97: 65, 98: 66, 99: 67, 100: None, 101: None, 102: None}

更详细的使用看translate方法。

str.partition(sep)

从第一个出现的sep部分分离字符串,得到一个3个元素的元组:sep之前的部分、sep、sep之后的部分。如果sep未找到,任然返回一个3个元素的元组:str、空字符串、空字符串。

>>> s = '123456789'
>>> s.partition('45')
('123', '45', '6789')
>>> s.partition('666')
('123456789', '', '')

str.replace(old, new[, count])

返回一个新的字符串,其中所有old都被new代替,count用于指定只替换前count个。

str.rfind(sub[, start[, end]])

返回sub在str中最后出现的索引号,返回-1表示未找到。

str.rindex(sub[, start[, end]])

同rfind,但如果sub未找到,则抛出ValueError。

str.rjust(width[, fillchar])

看ljust,rjust表示右适配。

str.rpartition(sep)

看partition,rpartition表示从右查找sep。

str.rsplit(sep=None, maxsplit=-1)

使用sep分隔str,maxsplit表示最大的划分数,sep不指定或为none,则使用空格分隔str。

>>> s = '12345' * 8
>>> s.rsplit('45')
['123', '123', '123', '123', '123', '123', '123', '123', '']
>>> s.rsplit('45',6)
['1234512345123', '123', '123', '123', '123', '123', '']

str.rstrip([chars])

返回str的拷贝,末尾的字符被移除,默认移除空格,chars表示移除的字符集。

>>> '   spacious   '.rstrip()
'   spacious'
>>> 'mississippi'.rstrip('ipz')
'mississ'

str.split(sep=None, maxsplit=-1)

看rsplit,返回一个使用sep分隔的列表,sep未指定则使用空格分隔。maxsplit表示最大分隔次数。

str.splitlines([keepends])

使用那个行结束符分隔str,返回一个行列表。keepends默认为false,表示行分隔符不包含在结果列表中。

>>> 'ab c\n\nde fg\rkl\r\n'.splitlines()
['ab c', '', 'de fg', 'kl']
>>> 'ab c\n\nde fg\rkl\r\n'.splitlines(keepends=True)
['ab c\n', '\n', 'de fg\r', 'kl\r\n']

注意和split的区别:

1)对于空字符串,splitlines返回空列表,split返回包含一个空字符串的列表。

>>> "One line\n".splitlines()
['One line']
>>> 'Two lines\n'.split('\n')
['Two lines', '']

2)对于行结束符结束的字符串,splitlines返回单个元素的列表,split返回两个元素的列表。

>>> "".splitlines()
[]
>>> ''.split('\n')
['']

str.startswith(prefix[, start[, end]])

字符串如果以prefix开头,则返回true;prefix可以是一个元组。

>>> s = 'Hello!world.'
>>> s.startswith('Hello')
True
>>> s.startswith(('Hello','hello'))
True

str.strip([chars])

返回str的拷贝,并移除首尾字符(默认空白)。

>>> '   spacious   '.strip()
'spacious'
>>> 'www.example.com'.strip('cmowz.')
'example'

str.swapcase()

返回str的拷贝,并转换大小写,注意s.swapcase().swapcase() == s。

>>> s = 'aBcDe'
>>> s.swapcase()
'AbCdE'

str.title()

返回str的拷贝,每个单词的首字母大写,其余字母小写。

>>> 'Hello woRld'.title()
'Hello World'
>>> "they're bill's friends from the UK".title()
"They'Re Bill'S Friends From The Uk"

str.translate(map)

对应看maketrans。返回str的拷贝,其中所有的字符都使用map做了映射。

>>> 'abcdefg-1234567'.translate(str.maketrans('abc', 'ABC'))
'ABCdefg-1234567'
>>> 'abcdefg-1234567'.translate(str.maketrans('abc', 'ABC', '456'))
'ABCdefg-1237'

str.upper()

返回str的拷贝,其中的字符都被转换到大写。注意如果str中包含了无大小写形式(uncased)的字符,str.upper().isupper()会得到false。

str.zfill(width)

返回一个str的拷贝,长度为width,左边用0填充,如果str以‘+‘/‘-‘开头,则从‘+‘/‘-‘之后开始填充。

>>> "42".zfill(5)
'00042'
>>> "-42".zfill(5)
'-0042'

字符串的格式化打印

字符串支持%操作,用于格式化字符串,类似于C语言中的sprintf()。

当格式化仅要求一个参数时,值可以为单个的字符串,否则,值必须是和参数长度相等的元组或者映射对象。

基本的转换说明符包括以下部分:

1)%字符:标记转换说明符位置;

2)转换标志(可选):-表示左对齐;+表示在转换值之前要加上正负号;" "(空白字符)表示整数之前保留空格;0表示转换值若位数不够则填充0;

3)最小字符宽度(可选):转换后的最小字符宽度;

4)点(.)后跟精度值(可选):如果是实数,则表示出现在小数点后的位数;如果为字符串,表示最大字段宽度;

5)转换类型:

d,i:带符号的十进制数

0:不带符号的八进制

u:不带符号的十进制

x:不带符号的十六进制(大、小写均可)

e:科学计数法表示的浮点数(大、小写均可)

f:十进制浮点数(大、小写均可)

g:如果指数大于-4或者小于进度值则同e,否则同f(大、小写均可)

C:单字符(接受整数或者单字符字符串)

r:字符串(使用repr转换任意Python对象)

s:字符串(使用str转换任意Python对象)

看下面的例子。

直接转换

>>> "I'm %s. I'm %d year old" % ('Tomato', 30)
"I'm Tomato. I'm 30 year old"
>>> from math import pi
>>> 'Pi: %f...' % pi
'Pi: 3.141593...'

指定宽度和精度

>>> 'Pi: %10f' % pi
'Pi:   3.141593'
>>> 'Pi: %10.2f' % pi
'Pi:       3.14'
>>> '%.5s' % 'this is a test'
'this '

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

>>> '%.*s' % (8,'this is a test')
'this is '

符号、对齐和0填充

使用‘-‘表示左对齐:

>>> '%10.2f' % pi
'      3.14'
>>> '%-10.2f' % pi
'3.14      '

使用0表示数字将会用0进行填充:

>>> '%010.2f' % pi
'0000003.14'

" "表示在整数前加上空格,负数不变,用于对齐正负数:

>>> print(('% 5d' % 10) + '\n' + ('% 5d' % -10))
   10
  -10

+表示不管整数还是负数,都表示出符号:

>>> print(('%+5d' % 10) + '\n' + ('%+5d' % -10))
  +10
  -10
时间: 2024-11-01 19:49:15

python7:字符串的相关文章

python-7:字符串格式化之二 format

1.'{1}..{0}'.format(1,2,3):(1,2,3)看着元组,{1}{0},根据索引,取元组数据 s='I am {},my age is {},my love {}'.format('wx',18,'pyhton')#默认匹配填充print(s) s='I am {1},my age is {0}'.format('wx',18,'pyhton')#('wx',18,'pyhton'), 看着元组,{0},取对应索引的值print(s) 2.'{1}..{0}'.format(

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

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

零基础学python-7.6 字符串格式化表达式

字符串格式化同意在一个单个的步骤中对一个字符串运行多个特定类型的替换 特别是给用户提示的时候,格式化很方便 实现方法: 1.格式化表达式,类似于c语音的printf 在表达式中,我们使用%二进制操作符 >>> print('this is %d %s bird' % (1,'dead')) this is 1 dead bird 举上面的样例说明(注意我们以下所说的%,都是以字符串和元组中间的那个为准) 在%的左边放置一个字符串.字符串里面放置了一个或者多个使用%开头的嵌入对象 在%的右

条件、循环、函数定义、字符串操作练习

注意标准库的两种导入与使用方式,建议大家采用<库名>.<函数名>的方式. 对前面的代码进行优化,用for,while,if,def实现: 用循环画五角星 1 import turtle 2 3 turtle.fillcolor("red") 4 turtle.begin_fill() 5 for i in range(5): 6 turtle.forward(100) 7 turtle.right(144) 8 turtle.end_fill() 用循环画同心圆

sql常用格式化函数及字符串函数

一.常用格式化函数 1.日期转字符串 select to_char(current_timestamp, 'YYYY-MM-DD HH24:MI:SS') //2017-09-18 22:41:50 YYYY:年(4和更多位) MM:月份号(01-12) DD:一个月里的日(01-31) HH24:一天的小时数(00-23) MI:分钟(00-59) SS:秒(00-59) 2.字符串转日期 select to_date('2017-09-18','YYYY-MM-DD') //2017-09-

PHP 格式化字符串sprintf()

字符串函数 sprintf() 函数把格式化的字符串写入一个变量中 函数说明:sprintf(格式, 要转换的字符串)  参考PHP手册 返回: 格式化后的字符串 举例: 如:保留2位小数, $str = '99.9';echo sprintf('%01.2f', $str);结果为:99.90 echo round($str, 2); 结果为:99.9

js中字符串的替换

定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 语法 stringObject.replace(regexp/substr,replacement)参数 描述 regexp/substr 必需.规定子字符串或要替换的模式的 RegExp 对象. 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象. replacement 必需.一个字符串值.规定了替换文本或生成替换文本的函数. 返

数组、字符串、集合

数组与集合的转换.数组与字符串的转换 ========数组变集合 String[] arr = {"abc","cc","kkkk"}; //把数组变成list集合有什么好处? /* 可以使用集合的思想和方法来操作数组中的元素. 注意:将数组变成集合,不可以使用集合的增删方法. 因为数组的长度是固定. contains. get indexOf() subList(); 如果你增删.那么会产生UnsupportedOperationExcepti

《Java编程思想》第十三章 字符串

<Java编程思想>读书笔记 1.String作为方法的参数时,会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置,从未动过. 2.显式地创建StringBuilder允许预先为他指定大小.如果知道字符串多长,可以预先指定StringBuilder的大小避免多次重新分配的冲突. 1 /** 2 * @author zlz099: 3 * @version 创建时间:2017年9月1日 下午4:03:59 4 */ 5 public class UsingStringBuilder {