第六章 字符串操作

字符串字面量

在Python中输入字符串值相当简单的

特点:

1.以单引号或双引号开始和结束'This is dog'

2.使用双引号的一个好处,就是字符串中可以使用单引号字符。

>>> spam = "this is Alice's dog"
this is Alice's dog

解析:因为字符串以单引号开始和结束,所以Python知道单引号是字符串的一部分,而不是表示字符串的技术。但是如果在字符串中既需要使用单引号又需要使用双引号,那就要使用转义字符。

 

转义字符

定义:"转义字符"让你输入一些字符,他们用其他方式是不可能放在字符串里的

用法:转义字符包含一个倒斜杠(\),紧跟着是想要添加到字符串的字符,如\':

>>> spam = 'this is Alice\'s dog'
this is Alice's dog

解析:Python知道,因为Alice\'s中的单引号有一个斜杠,所以它不是表示字符串结束的单引号。转义字符能够让你在字符串中加入单引号和双引号。

 

转义字符

转义字符                打印为

\'                             单引号

\"                            双引号

\t                            制表符

\n                           换行符

\\                            倒斜杠

>>> print("Hello there!\nHow are you?\nI'm doing fine.")
Hello there!
How are you?
I'm doing fine.

 

原始字符串

定义:原始字符串完全忽略所有的转义字符

用法:可以在字符串开始的引号之前加上r

>>>print(r'this is Alice\'s dog.')
this is Alice\'s dog.

如果输入的字符串包含许多倒斜杠,在正则表达式字符串中,原始字符串就很有用。

 

用三重引号的多行字符串

背景:虽然可以用\n转义字符将换行放入一个字符串

定义:但是使用多行字符串通常更容易

用法:多行字符串的起止式3个单引号或3个双引号。"三重引号"之间的所以引号、制表符或换行,都被认为是字符串的一部分。

>>>print('''Dear Alice,
Eve's cat has been arrested for catnapping,cat burglary,and extortion.
Sincerely,
bob''')
Dear Alice,
Eve's cat has been arrested for catnapping,cat burglary,and extortion.
Sincerely,
bob

 

多行注释

虽然#号字符表示这一行注释,但是多行字符串常用作多行注释。

'''Dear Alice,
Eve's cat has been arrested for catnapping,cat burglary,and extortion.
Sincerely,
bob'''

 

字符串下标和切片

字符串像列表一样,使用下标和切片。可以将字符串'Hello world!'看成是一个列表,字符串中的每个字符都是一个表项,有对应得下标。

spam = "Hello World!"
print("number 0:"spam[0])
print("number 5:"spam[5])
print(spam[0:7])
执行结果:
H
 
Hello W

注意:字符串切片并没有修改原来的字符串。可以从一个变量中获取切片,记录在另一个变量中。

 

字符串的in和not in操作符

像列表一样,in和not in操作符也可以用于字符串。用in或not in连接两个字符串得到的表达式,将求值为布尔值True或False。

>>>'hello' in 'hello world'
True

>>>'hello' in 'Hello'
False

>>>spam = 'HelloWorld!'
>>>"" in spam
True

注意:区分大小写

 

字符串方法:

upper()、lower()是字符串方法返回一个新字符串,其中原字符串的所有字母都被相应的转换为大写或小写,字符串中非字母字符保持不变

>>>spam = 'hello World'
>>>spam.upper()
>>>spam
HELLO WORLD

注意:如果你希望改变原来的字符串,就必须将调用后的字符串重新赋值给原来的变量 spam= spam.upper()

isupper()、islower()是判断大小写,返回的也是布尔值,类似的还有isX字符串方法来描述字符串的特点

  • isalpha()返回True,如果字符串只包含字母,并且非空
  • isalnum()返回True,如果字符串只包含字母和数字,并且非空
  • isdecimal()返回True,如果字符串只包含数字字符,并且非空
  • isspace()返回True,如果字符串只包含空格、制表符和换行,并且非空
  • istitle()返回True,如果字符串只包含以大写字母开头、后面都是小写字母的单词
  • isalpha()返回True,如果字符串只包含字母,并且非空
>>>'hello'.isalpha()
True

>>>" ".isspace()
True

>>>'This Is Title 123'.istitle()
True

>>>'THis is TITle 123'.istitle()
False

应用场景:如果需要验证用户输入,isX字符串方法是有用的。下面程序反复询问用户年龄和口令,直到他们有效输入

 

while True:
       print('Enter your age:')
       age = input()
       if age.isdecimal():
            break
       print('Please enter a number for your age.')

 
while True:
      print('Enter your age:')
      age = input()
      if age.isdecimal():
          break
      print('Please enter a number for your age.')
运行程序:
Enter your age:
forty two
Please enter a number for your age.
Enter your age:
42
Select a new password (letters and numbers only):
secr3t!
Passwords can only have letters and numbers.
Select a new password (letters and numbers only):
secr3t

解析:

1.在第一个while循环中,我们要求用户输入年龄,并将输入保存在age中。如果age是数字,我们就跳出第一个while循环,转向第二个循环,询问口令。否则,我们告诉用户需要输入数字,并再次要求他输入年龄。

2.在第二个while循环中我们要求输入口令,客户的输入保存在password中。如果输入的是字母或数字,就跳出循环,如果不是,就反复要求用户输入字母或数字的口令。

 

字符串方法startswith()和endswith()

 startswith()和endswith()方法用于检查字符串的开始或结束部分是否等于另一个字符串,等于返回True,不等于返回False

>>> 'Hello world!'.startswith('Hello')
True

>>> 'Hello world!'.endswith('world!')
True

>>> 'abc123'.startswith('abcdef')
False

>>> 'abc123'.endswith('12')
False

>>> 'Hello world!'.startswith('Hello world!')
True

>>> 'Hello world!'.endswith('Hello world!')
True

 

字符串方法join()和split()

join()方法:用于将一个字符串列表转换并连接成一个单独的字符串

>>> ', '.join(['cats', 'rats', 'bats'])
'cats, rats, bats'

 

>>> ' '.join(['My', 'name', 'is', 'Simon'])
'My name is Simon'

 
>>> 'ABC'.join(['My', 'name', 'is', 'Simon'])
'MyABCnameABCisABCSimon

解析:调用join()方法的字符串,被插入到列表参数中的每个字符串中间,在","字符串上调用join(['cats', 'rats', 'bats']),返回的字符串就是'cats, rats, bats'

 

而split正好相反

注意:默认情况下,字符串'My name is Simon'按照各种空白字符分割。这些空白字符不包含在返回的列表字符串中。如果需要按照不同的字符串分割,可以在split()中传入参数去实现

>>> 'MyABCnameABCisABCSimon'.split('ABC')
['My', 'name', 'is', 'Simon']


>>> 'My name is Simon'.split('m')
['My na', 'e is Si', 'on']

 

 

rjust()、ljust()和center()方法对齐文本

用法:默认通过空格来填充空的字符串来对其文本。第一个参数是一个整数长度,第二个可选参数将指定一个填充字符,取代空格字符

>>> 'Hello'.rjust(10)
' Hello'

>>> 'Hello'.rjust(20)
'Hello'

>>> 'Hello World'.rjust(20)
' Hello World'

>>> 'Hello'.ljust(10)
'Hello

>>> 'Hello'.rjust(20, '*')
'***************Hello'

>>> 'Hello'.ljust(20, '-')
'Hello---------------'

 

strip()、rstrip()和lstrip()删除空白字符

用途:删除左边,右边或两边的空格字符,strip()方法将返回一个新的字符串,它的开头或末尾都没有空白字符。

>>> spam = ' Hello World '
>>> spam.strip()
'Hello World'

>>> spam.lstrip()
'Hello World '

>>> spam.rstrip()
' Hello World

也可以指定两边的哪些字符应该删除,如:

>>> spam = 'SpamSpamBaconSpamEggsSpamSpam'
>>> spam.strip('ampS')
'BaconSpamEggs'

>>> spam = 'SpamSpamBaconSpamEggsSpamSpam'
>>> spam = spam.strip('mpS')
amSpamBaconSpamEggsSpamSpa

解析:

向strip()方法传入参数'ampS',告诉它在变量中存储的字符串两端,删除出现的

a、m、p 和大写的S。传入strip()方法的字符串中,字符的顺序并不重要:strip('ampS')

做的事情和strip('mapS')或strip('Spam')一样。

 

pyperclip模块拷贝粘贴字符串

pyperclip模块有copy()和paste()函数,可以向计算机的剪贴板发送文本,或从它接收文本。

用法:

1.从剪贴板粘贴文本;

2.对它做一些处理;

3.将新的文本复制到剪贴板。

 

>>> import pyperclip
>>> pyperclip.copy('Hello world!')
>>> pyperclip.paste()
'Hello world!'

当然,如果你的程序之外的某个程序改变了剪贴板的内容,paste()函数就会返

回它。例如,如果我将这句话复制到剪贴板,然后调用paste(),看起来就会像这样:

>>> pyperclip.paste()

例如,如果我将这句话复制到剪贴板,然后调用paste(),看起来就会像这样:

 

习题:

1.什么是转义字符?

答:"转义字符"让你输入一些字符,他们用其他方式是不可能放在字符串里的,而使用转义字符后,则可以

 

2.转义字符\n 和\t 代表什么?

答:\n是换行符,   \t是制表符

3.如何在字符串中放入一个倒斜杠字符\?

答:\\

 

4.字符串"Howl's Moving Castle"是有效字符串。为什么单词中的单引号没有转义,却没有问题?

答:因为外边字符串的双引号标识字符串的开始和结束,可以包含单引号字符
 

5.如果你不希望在字符串中加入\n,怎样写一个带有换行的字符串?

答:使用三重引号的多行字符串

('''

''')

 

 

6.下面的表达式求值为什么?

'Hello world!'[1]
• 'Hello world!'[0:5]
• 'Hello world!'[:5]
• 'Hello world!'[3:]
答:
e
Hello
Hello
lo world

 

 

7.下面的表达式求值为什么?

'Hello'.upper()
• 'Hello'.upper().isupper()
• 'Hello'.upper().lower()
答:
HELLO
True
hello

 

8.下面的表达式求值为什么?

'Remember, remember, the fifth of November.'.split()
• '-'.join('There can be only one.'.split())
答:
["Remember, remember, the","fifth","of","November."]
There-can-be-only-one.

 

9.什么字符串方法能用于字符串右对齐、左对齐和居中?

答:rjust(),ljust(),center()

 

10.如何去掉字符串开始或末尾的空白字符?

答:lstrip()和rstrip()

posted @ 2017-07-04 16:07  Mr.hu  阅读(204)  评论(0编辑  收藏  举报