利用索引和分片访问字符串中的单个字符也壹度不在话下了,字典的格式化除了扩张字符串键外

#在前方大家已经认识了如何使用字符串格式化成效格式化元组中的全部值。借使使用字典(只以字符串作为键)而不是元组做那项职业,会使字符串格式化更有意思壹些,例如:

Python基础教程(第二章 使用字符串),python基础教程

正文内容全方位来自《Python基础教程》第3版,在此分享本人的读书之路。

______迎接转发:http://www.cnblogs.com/Marlowes/p/5312236.html\_\_\_\_\_\_

 

                                Created
on Xu Hoo

 

读者已经知晓了怎么是字符串,也清楚怎样创制它们。利用索引和分片访问字符串中的单个字符也已经不在话下了。那么本章将会介绍怎么着利用字符串格式化别的的值(如打字与印刷特殊格式的字符串),并简要询问一下选拔字符串的剪切、连接、搜索等形式能做些什么。

 

叁.一 基本字符串操作

具有正规的行列操作(索引、分片、乘法、判定成员身份、求长度、取最小值和最大值)对字符串一样适用,上1章早已讲述了那么些操作。不过,请记住字符串都以不可变的。由此,如下所示的项或分片赋值都以不合法的:

>>> website = "http://www.python.org"
>>> website[-3:] = "com"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

 

 

三.贰 字符串格式化:精简版

倘诺初次接触Python编制程序,那么Python提供的保有字符串格式化效用大概用不到太多。因而,那里只简要介绍部分首要的内容。就算读者对细节感兴趣,能够崇敬下一章,不然能够直接阅读叁.四节。

字符串格式化使用字符串格式化操作符(这么些名字或然很方便的)即百分号%来贯彻。

注:%也能够用作模运算(求余)操作符。

在%的右边停放2个字符串(格式化字符串),而左边则停放希望被格式化的值。能够接纳三个值,如四个字符串大概数字,也足以使用五个值的元组只怕下壹章将会探讨的字典(倘使愿意格式化七个值的话),那有的内容将要下一章进行座谈。①般景色下采用元组:

>>> format = "Hello, %s. %s enough for ya?"
>>> values = ("world", "Hot")
>>> print format % values
Hello, world. Hot enough for ya?

注:假使运用列表或然别的体系取代元组,那么类别会被演讲为一个值。唯有元组和字典(将在第5章切磋)能够格式化二个之上的值。

格式化字符串的%s部分号称转移表达符(conversion
specifier),它们标记了急需插入转变值的职务。s表示值会被格式化为字符串——假设不是字符串,则会用str将其转移为字符串。那些措施对大繁多值都使得。别的转换表达符请参见本章前面包车型客车表三-一.

注:假若要在格式化字符串里面包涵百分号,那么必须使用%%,那样Python就不会将百分号误以为是更动表达符了。

如果要格式化实数(浮点数),能够使用f表达更换表达符的花色,同时提供所急需的精度:三个句点再增多希望保留的小数位数。因为格式化转变表明符总是以表示项目标字符结束,所以精度应该献身类型字符后面:

>>> format = "Pi with three decimals: %.3f"
>>> from math import pi
>>> print format % pi
Pi with three decimals: 3.142

 

模板字符串

string模块提供此外1种格式化值的艺术:模板字符串。它的干活格局接近于广大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.'

方法safe_substitute不会因缺乏值也许不正确运用$字符而失误(越来越多音讯请参见Python库参考手册的4.1.二节)。

 

三.三 字符串格式化:完整版

格式化操作符的右操作数能够是自由档次,假使是元组大概映射类型(如字典),那么字符串格式化将会迥然分化。大家从不涉及映射(如字典),在此先精晓一下元组。第伍章还会详细介绍映射的格式化。

设若右操作数是元组的话,则在那之中的每三个要素都会被单独格式化,每一种值都亟需3个应和的转换表明符。

注:假诺急需转移的元组作为转变表明式的一片段存在,那么必须将它用圆括号括起来,避防止失误。

>>> "%s plus %s equals %s" % (1, 1, 2)
'1 plus 1 equals 2'
>>> "%s plus %s equals %s" % 1, 1, 2  # Lacks parentheses!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string

主旨的转移表达符(与此绝对应的是总体的更改表明符,也正是包蕴映射键的表明符,详细内容参见第伍章)包蕴以下1些。注意,这个项的各类是重中之重的。

(一)%字符:标志调换表明符的开端。

(二)转变标记(可选): – 代表左对齐; + 表示在转变值此前要拉长正负号;“”
(空白字符)表示整数在此以前封存空格;0代表调换值若位数不够则用0填充。

(三)最小字段宽度(可选):转变后的字符串至少应该具备该值钦定的上升的幅度。如若是*,则升幅会从值元组中读出。

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

(五)转换类型:参见表三-一。

表叁-一 字符串格式化转换类型

       d,
i                    带符号的10进制整数

       o                      
不带符号的8进制

       u                      
不带符号的10进制

       x                      
不带符号的十6进制(小写)

       X                      
不带符号的十陆进制(大写)

       e                       
科学计数法表示的浮点数(小写)

       E                       
科学计数法表示的浮点数(大写)

       f, F                     十进制浮点数

       g                      若是指数大于-4依旧小于精度值则和e同样,别的情状与f一样

       G                       
倘若指数超过-肆也许小于精度值则和E同样,别的情状与F一样

       C                      单字符(接受整数依旧单字符字符串)

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

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

接下去多少个小节将对转移表明符的逐条要素进行详尽斟酌。

 

三.三.一 轻巧转变

轻便易行的转移只须要写出调换类型,使用起来非常粗略:

>>> "Price of eggs: $%d" % 42
'Price of eggs: $42'
>>> "Hexadecimal price of eggs: %x" % 42
'Hexadecimal 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: %r" % 42L
'Using repr: 42L'

 

三.三.二 字段宽度和精度

转换表达符能够总结字段宽度和精度。字段宽度是改造后的值所保留的小不点儿字符个数,精度(对于数字转变到说)则是结果中应该包括的小数位数,或然(对于字符串转换到说)是更动后的值所能包涵的最大字符个数。

那七个参数都以整数(首先是字段宽度,然后是精度),通过点号(.)分隔。就算多个都是可选的参数,但倘诺只交付精度,就非得包括点号:

>>> "%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'

 

三.3.3 符号、对齐和用0填充

在字段宽度和精度值在此以前还是能停放三个“标记”,该标记可以是零、加号、减号或空格。零象征数字将会用0实行填写。

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

在意,在0第10中学初露的那三个0并不意味着字段宽度表达符为捌进制数,它只是个普通的Python数值。当使用010当作字段宽度表达符的时候,表示字段宽度为10,并且用0实行填写空位,而不是说字段宽度为八:

>>> 010
8

减号(-)用来左对齐数值:

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

能够见到,在数字的右手多出了附加的空格。

而空白(“”)意味着在正数前增加空格。那在急需对齐正负数时会很有用:

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

代码清单3-第11中学的代码将运用星号字段宽度表明符来格式化一张带有水果价格的报表,表格的总宽度由用户输入。因为是由用户提供新闻,所以就无法在更动表达符上校字段宽度硬编码。使用星号运算符就可以从转换元组中读出字段宽度。

图片 1 1
#!/usr/bin/env python 2 # coding=utf-8 3 4 #
使用给定的增长幅度打字与印刷格式化后的价位列表 5 陆 width = input(“Please enter
width: “) 柒 8 price_width = 10 9 item_width = width – price_width 10
11 header_format = “%-*s%*s” 12 format = “%-*s%*.2f” 13 14 print
“=” * width 15 16 print header_format % (item_width, “Item”,
price_width, “Price”) 17 18 print “-” * width 19 20 print format %
(item_width, “Apples”, price_width, 0.4) 21 print format %
(item_width, “Pears”, price_width, 0.5) 22 print format %
(item_width, “Cantaloupes”, price_width, 1.92) 23 print format %
(item_width, “Dried Apricots (16 oz.)”, price_width, 8) 24 print
format % (item_width, “Prunes (4 lbs.)”, price_width, 12) 25 26 print
“=” * width Code_Listing
3-1

以下是程序运维示例:

Please enter width: 35
===================================
Item                          Price
-----------------------------------
Apples                         0.40
Pears                          0.50
Cantaloupes                    1.92
Dried Apricots (16 oz.)        8.00
Prunes (4 lbs.)               12.00
===================================

 

3.四 字符串方法

前方几节已经介绍了繁多列表的法子,字符串的法子还要加上得多,这是因为字符串从string模块中“承继”了不少艺术,而在初期版本的Python中,这么些格局都以用作函数出现的(假设确实必要的话,还是能够找到那些函数的)。

因为字符串的方式是实在太多,在那边只介绍部分特地实用的。全体办法请参见附录B。在字符串的法子描述中,能够在本章找到涉嫌到别的艺术的参阅(用“请参见”标识),或请参见附录B。

 

唯独字符串未死

就算字符串方法完全出自string模块,不过那么些模块还包涵1些无法当做字符串方法应用的常量和函数。maketrans函数正是中间之1,前面会将它和translate方法一齐介绍。上边是有的实用的字符串常量(对于此模块的越来越多介绍,请参见Python库参考手册(http://python.org/doc/lib/module-string.html)的4.1节)。

√ string.digits:包括数字0~玖的字符串。

√ string.letters:包蕴全数字母(大写或小写)的字符串。

√ string.lowercase:包蕴全数小写字母的字符串。

√ string.printable:包罗全数可打印字符的字符串。

√ string.punctuation:包蕴全数标点的字符串。

√ string.uppercase:包罗全体大写字母的字符串。

字母字符串常量(例如string.letters)与地区有关(也就是说,其具体值取决于Python所布署的言语)(在Python三.0中,string.letters和其连带内容都会被移除。假诺急需则应当选用string.ascii_letters常量代替)。即便得以鲜明本身行使的ASCII,那么能够在变量中使用ascii_前缀,例如string.ascii_letters。

 

3.4.1 find

find方法能够在二个较长的字符串中查找子串。它回到子串所在地点的最左端索引。如若未有找到则赶回-一。

>>> "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中利用了”$$$”表明式建立了3个垃圾邮件过滤器。也足以运用find方法(Python2.叁在先的版本中也可用,可是in操作符只能用来查找字符串中的单个字符):

>>> subject = "$$$ Get rich now!!! $$$"
>>> subject.find("$$$")
0

注:字符串的find方法并不回去布尔值。就算回去的是0,则印证在索引0地点找到了子串。

其一措施还足以选取可选的起头点和截止点参数:

>>> subject = "$$$ Get rich now!!! $$$"
>>> subject.find("$$$")
0
>>> subject.find("$$$", 1)  # 只提供起始点
20
>>> subject.find("!!!")
16
>>> subject.find("!!!", 0, 16)  # 提供起始点和结束点
-1

留意,由开端和终止值内定的限制(第二个和第二个参数)包括第二个目录,但不分包第贰个目录。那在Python中是个常规。

附录B:rfind、index、rindex、count、startswith、endswith。

 

3.4.2 join

join方法是非常关键的字符串方法,它是split方法的逆方法,用来连接系列中的元素:

>>> seq = [1, 2, 3, 4, 5]
>>> sep = "+"
>>> sep.join(seq)  # 连接数字列表
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
>>> 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

能够看出,需求被接连的行列成分都不可能不是字符串。注意倒数例子中动用了目录的列表,而在格式化时,根据UNIX和DOS/Windows的约定,使用了不一样的相间符号(在DOS版本中还扩充了驱动器名)。

请参见:split。

 

3.4.3 lower

lower方法再次来到字符串的小写字母版。

>>> "Trondheim Hammer Dance".lower()
'trondheim hammer dance'

万壹想要编写“不区分轻重缓急写”的代码的话,那么那几个办法就派上用场了——代码会忽略大小写境况。例如,就算想在列表中寻找一个用户名是还是不是存在:列表包蕴字符串”gumby”,而用户输入的是”Gumby”,就找不到了:

>>> if "Gumby" in ["gumby", "smith", "jones"]: print "Found it!"
...
>>>

假使存款和储蓄的是”Gumby”而用户输入”gumby”甚至是”GUMBY”,结果也是平等的。化解方法正是在储存和寻觅时把装知名字都转移为小写。代码如下:

>>> name = "Gumby"
>>> names = ["gumby", "smith", "jones"]
>>> if name.lower() in names: print "Found it!"
...
Found it!

请参见:translate。

附录B:islower、capitalize、swapcase、title、istitle、upper、isupper。

 

标题转变

和lower方法相关的是title方法(参见附录B),它会将字符串转变为标题——也正是装有单词的首字母大写,而别的字母小写。但是它使用的单词划分方法大概会拿走并不自然的结果:

>>> "that's all folks".title()
"That'S All Folks"

再介绍此外一个string模块的capwords函数:

>>> import string
>>> 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'

若是已经用过文字处理程序中的“查找并替换”功效的话,就不会猜忌那个办法的用处了。

请参见:translate。

附录B:expandtabs。

 

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']

留意,假若不提供别的分隔符,程序会把全数空格作为分隔符(空格、制表、换行等)。

请参见:join。

附录B:rsplit、splitlines。

 

3.4.6 strip

strip方法再次回到去除两侧(不包罗内部)空格的字符串:

>>> "     internal whitespace is kept     ".strip()
'internal 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'

这几个主意只会删除两侧的字符,所以字符串中的星号未有被去掉。

附录B:lstrip、rstrip。

 

3.4.7 translate

translate方法和replace方法1致,能够轮换字符串中的某个部分,然则和前者分化的是,translate方法只处理单个字符。它的优势在于能够而且进行五个替换,有个别时候比replace作用高得多。

应用那些办法的不二等秘书籍有为数不少(比如替换换行符可能此外因平台而异的特殊字符)。不过让大家着想二个简短的例证(相当的粗略的事例):纵然需求将尊重的英文文本调换为含有德意志联邦共和国口音的版本。为此,供给把字符c替换为k把s替换为z。

在利用translate转变此前,需求先完毕一张转换表。转变表中是以某字符替换某字符的相应关系。因为那么些表(事实上是字符串)有多达26二12个体系,大家依然不要本身写了,使用string模块里面包车型客车maketrans函数就行。

maketrans函数接受五个参数:三个等长的字符串,表示第八个字符串中的每种字符都用第三个字符串中相同地点的字符替换。驾驭了呢?来看二个简便的事例,代码如下:

>>> from string import maketrans
>>> table = maketrans("cs", "kz")

 

转变表中都有啥

转变表是富含替换ASCII字符集中二五14个字符的更迭字母的字符串。

>>> table = maketrans("cs", "kz")
>>> len(table)
256
>>> table[97:123]
'abkdefghijklmnopqrztuvwxyz'
>>> maketrans("", "")[97:123]
'abcdefghijklmnopqrstuvwxyz'

正如你见到的,作者1度把小写字母部分的表提抽取来了。看一下以此表和空调换(没有变动任何事物)中的字母表。空调换包罗三个家常便饭的字母表,而在它前面的代码中,字母c和s分别被沟通为k和z。

 

创设这么些表以后,能够将它当做translate方法的参数,实行字符串的转换如下:

>>> "this is an incredible test".translate(table)
'thiz iz an inkredible tezt'

translate的第三个参数是可选的,这几个参数是用来钦赐供给删除的字符。例如,如若想要模拟一句语速超快的德意志语,能够去除全数空格:

>>> "this is an incredible test".translate(table, " ")
'thizizaninkredibletezt'

请参见:replace、lower。

 

3.5 小结

本章介绍了字符串的二种尤其重大的行使情势。

字符串格式化:求模操作符(%)能够用来将别的值转变为涵盖转变标记的字符串,例如%s。它还可以够用来对值举办不一致方法的格式化,包含左右对齐、设定字段宽度以及精度值,增添符号(正负号)可能左填充数字0等。

字符串方法:字符串有多数办法。某些非凡实惠(比如split和join),有个别则用的很少(比如istitle可能capitalize)。

 

三.伍.一 本章的新函数

本章新关系的函数如表三-2所示。

 

表3-二 本章的新函数

string.capwords(s[,
sep])          使用split函数分隔字符串s(以sep为分隔符),使用capitalize函数将划分获得的各单词首字母大写,并且接纳join函数以sep为分隔符将各单词连接起来。

string.maketrans(from, to)          创立用于转移的调换表。

 

三.5.2 接下去学怎么着

列表、字符串和字典是Python中最重视的3种数据类型。列表和字符串已经学习过了,那么上面是哪些吗?下一章中的主要内容是字典,以及字典什么补助索引以及别的事办公室法的键(比如字符串和元组)。字典也提供了有的办法,不过数量未有字符串多。

 

http://www.bkjia.com/Pythonjc/1113126.htmlwww.bkjia.comtruehttp://www.bkjia.com/Pythonjc/1113126.htmlTechArticlePython基础教程(第三章
使用字符串),python基础教程
本文内容总体来源《Python基础教程》第一版,在此分享自身的求学之路。
______欢迎转…

1 >>> student={'小明':'1001','小智':'1002','小强':'1003','小刚':'1004'}
2 >>> print('小强的学号是:%(小强)s'%student)
3 小强的学号是:1003

#由操作结果看到,字典的格式化情势是在各种调换表明符中的%字符后加上用圆括号括起来的键,再跟上任何评释成分。

#字典的格式化除了增添字符串键外,转变表达符还像从前一样干活。以那种方法采取字典时,只要持有给出的键都能在字典中找到,就足以拿走人身自由数量的退换表达符。