2018-01-14 python学习第二天

3.1 基本字符串操作

【代码】

#所有标准的序列操作(索引、分片、乘法、判断成员资格、

#

求长度、取最小值和最大值)对字符串同样适用,但字符串是不可改变的website = 'http://www.python.org'

website[-3:] = 'com'

【结果】

Traceback (most recent call last):

  File"D:/python_file/20180113/test.py", line 4, in

    website[-3:] = 'com'

TypeError: 'str' object does not support item assignment

3.2 字符串格式化(精简版)

【代码】

#在%的左侧放置一个字符串(格式化字符串),而右侧放置希望格式化的值。一般情况下适用元组format = "Hello. %s. %s enough for ya?" #%s部分称为转换说明符,标记了需要插入转换值的位置,# s表示值会被格式化为字符串--若不是字符串,使用str将其转换为字符串values = ('world','Hot')

print(format % values)

#注:如果使用列表或其他元素代替元组,那么序列会被解释为一个值。只有元组和字典可以格式化一个以上的值

#

若在格式化字符串中包括百分号,那么必须使用%%,这样,Python就不会将百分号误认为是转换说明符了

#

格式化实数:可以使用f说明符类型,同时提供精度(句点加上希望保留小数的位数)format = 'P1 with three decimals: %.3f'

from math import pi

print(format % pi)

【结果】

Hello. world. Hot enough for ya?

P1 with three decimals: 3.142

【代码】

#stirng模块提供另外一种格式化值的方法:模板字符串。其中,substitute这个模板方法会用传递进来的关键字参数foo替换字符串中的¥foofrom string import Template

s = Template(

'$x. glorious $x!')

print(s)

print(s.substitute(x='slum')) #模板调用模板方法并传入参数

#

如果替换字段是单词的一部分,那么参数名必须用括号括起来s = Template("It's ${x}tastic!")

print(s.substitute(x = 'slum'))

#可以使用$$插入美元符号s = Template('Make $$ selling $x')

print(s.substitute(x = 'slum'))

#除了关键字参数之外,还可以使用字典变量提供值/名称对s = Template('A $thing must never $action')

d = {}

d[

'thing'] = 'gentleman'

d['action'] = 'show his socks'

print(s.substitute(d))

【结果】

slum. glorious slum!

It's slumtastic!

Make $ selling slum

A gentleman must never show his socks

3.3 字符串格式化(完整版)

【代码】

#如果右操作数是元组的话,则其中的每一个元素都会被单独格式化,每个值都需要一个对应的转换说明符print('%s

plus %s equals %s' % (1,1,2))

print('%s

plus %s equals %s' % 1,1,2) #Lacks parentheses!

【结果】

1 plus 1 equals 2

Traceback (most recent call last):

  File"D:/python_file/20180113/test.py", line 3, in

    print('%s plus %s equals %s' %1,1,2) #Lacks parentheses!

TypeError: not enough arguments for format string

字符串格式化转换类型

d,i带符号的十进制数

o不带符号的八进制

u不带符号的十进制

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

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

f,F十进制浮点数

C单字符

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

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

3.3.1 简单转换

【代码】

#简单转换只需要写出转换类型print('Price

of eggs:$%d' % 42)

print('Hexadecimal

price of eggs: %x' % 42)

from math import pi

print('Pi:%f...'% pi)

print('Very

inexact estimate of pi: %i' % pi)

print('Using

str: %s' % 42)

print('Using

repr: %r' % 42)

【结果】

Price of eggs:$42

Hexadecimal price of eggs: 2a

Pi:3.141593...

Very inexact estimate of pi: 3

Using str: 42

Using repr: 42

3.3.2 字段宽度和精度

【代码】

#转换说明符可以包括字段宽度和精度。宽度是转换后的值所保留的最下字符个数,精度(对于数字转换来说)则是结果中应该包含的小数位数,或者(对于字符串转换来说)是转换后的值所包含的最大字符个数from math import pi

print('%10f' % pi) #字段宽10print('%10.2f'% pi) #字段宽10,精度2print('%.2f'% pi) #精度2print('%.5s'% 'Guido van Rossum')

【结果】

  3.141593

      3.14

3.14

Guido

3.3.3 符号、对齐和0填充

【代码】

#在字段宽度之前还可以放置一个“标表”,该标表可以是零、加好、减号或空格。零表示数字将会使用0进行填充from math import pi

print('%010.2f'% pi)

#减号(-)用来左对齐数值print('%-10.2f'% pi)

print('% 5d' % 10) #" "表示前面填充空格print('%

5d' % -10)

print('%+5d' % 10) # +表示不管是整数还是负数都标出符号(同样在对齐是很有用)print('%+5d'% -10)

【结果】

0000003.14

3.14                                                             

   10

  -10

  +10

  -10


【代码】

#字符串格式化示例,使用给定的宽度打印格式化后的价格列表width = int(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(format % (item_width,'Pears',price_width,0.5))

print(format % (item_width,'Cantaloupes',price_width,1.92))

print(format % (item_width,'Dried Aprictos (16 oz.)',price_width,8))

print(format % (item_width,'Prunes (4 1bs.)',price_width,12))

print('=' * width)

form =

'%-*s% *s' # *代表宽度有输入时确定(对应width),-代表左对齐print(form % (10,'Appale',10,'Banana'))

form2 =

'%*s'  #%*s代表宽度由输入时确定,且右对齐print(form2 % (20,'Juice'))

【结果】

please enter width:35

===================================

Item                         Price

-----------------------------------

Apples                        0.40

Pears                         0.50

Cantaloupes                   1.92

Dried Aprictos (16 oz.)       8.00

Prunes (4 1bs.)              12.00

===================================

Appale        Banana

               Juice

3.4 字符串方法

前面有很多列表的方法,字符串的方法还要丰富些,这是因为字符串从string模块中“继承”了很多方法,早期Python版本中,这些方法以函数的形式出现。字符串方法是在太多,这里只研究常用的。

string模块中还包括一些不能作为字符串方法使用的常量,maketrans函数就是其中之一,它和translate方法可以进行比较。

有用的字符串常量:

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

string.letters: 包含所有字母(大写或小写)的字符串。

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

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

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

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

#注:在python3.0中,string.letters和相关内容都会被移除。如果需要则应该使用string.ascii_letters常量代替

3.4.1 find

【代码】

str = 'with a moo-moo here,and a moo-moo there'

title = "Monty Python's Flying Circus"

print(str.find('moo'))

print(title.find('Monty'))

print(title.find('Python'))

print(title.find('Flying'))

print(title.find('Zirquss'))

#字符串的find方法并不返回布尔值subject = '$$$ Get righ now!!! $$$'

print(subject.find('$$$',1)) #只提供起始点print(subject.find('!!!'))

print(subject.find('!!!',0,19)) #提供起始点和结束点(其中,结束点下标所在元素一定在所查找对象的最后一个元素对应下标的右边)

【结果】

7

0

6

15

-1

20

16

16

3.4.2 join

【代码】

#join方法是非常重要的方法,它是split方法的逆方法,用来在队列中添加元素seq = [1,2,3,4,5]

sep =

'+'

#sep.join(seq) #连接数字列表(因为字符串类型连接整型,类型不一致,因此报错)seq = ['1','2','3','4','5']

print(sep.join(seq)) # 即1+2+3+4+5  ,该操作即不改变sep的值,也不改变seq的值,而是在它们的基础上形成新的值dirs = '','usr','bin','env'

print(dirs)

print('/'.join(dirs)) #可以看出,join方法及可以对列表进行操作,也可以对元组进行操作print('C:'+'\\'.join(dirs))

#可以看到,需要添加的队列元素都必须是字符串。

【结果】

1+2+3+4+5

('', 'usr', 'bin', 'env')

/usr/bin/env

C:\usr\bin\env

3.4.3 lower

【代码】

#lower方法返回字符串的小写字母版print('Trondheim

Hamer Dance'.lower())

#方法对应某个对象

#

函数对应某个模块

【结果】

trondheim hamer dance

3.4.4 replace

【代码】

#replace方法返回某字符串的所有匹配项均被替换之后的字符串print('This

is a test'.replace('is','eez'))

#相当于文字处理程序中的“查找和替换”功能

【结果】

Theez eez a test

3.4.5 split

【代码】

#这是一个灰常重要的字符串方法,它是join的逆方法,用来将字符串分割成序列str = '1+2+3+4+5'

str2 = '/usr/bin/env'

str3 = 'Using the default'

print(str.split('+'))

print(str2.split('/'))

print(str3.split()) #不提供任何分隔符,则把空格作为分隔符

【结果】

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

['', 'usr', 'bin', 'env']

['Using', 'the', 'default']

3.4.6 strip

【代码】

#strip方法返回去除两侧(不包括内部)空格的字符串str = '    internal whitespace is kept     '

print(str.split())

names = [

'gumby','smith','jones']

name =

'gumby ' #如果名字后面多输入了一个空格if name in names:


print('Found1 it!')

if name.strip() innames:


print('Found2 it!')

#也可以指定需要去除的字符,将他们列为参数str = '*** SPAM * for * everyone!!! ***'

print(str.strip('

*!')) #这种方法只会去除两侧的字符(还有:lstrip,rstrip)。

【结果】

['internal', 'whitespace', 'is', 'kept']

Found2 it!

SPAM * for * everyone

3.4.7 translate

【代码】

#transplate方法和replace方法一样,可以替换字符串中的某些部分,但是它只处理单个字符。优势在于可以同时进行多个替换且效率高

#

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

#maketrans

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

#BUT: Python3.4

已经没有string.maketrans()了,取而代之的是内建函数: bytearray.maketrans()、bytes.maketrans()、str.maketrans()。Python maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。 注:两个字符串的长度必须相同,为一一对应的关系。table = str.maketrans('cs','kz') #'cs'被替换为'kz'st = 'this is an incredible test'

print(st.translate(table))

【结果】

thiz iz an inkredible tezt

�dZk�x�

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271