第六章 字符串操作
字符串字面量
在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()