「Python教程10」字符串操作

Python学习笔记

作者: Duter2016 | 2019-09-29 | 阅读
「编辑」 「本文源码」

1、转义字符
  “转义字符”让你输入一些字符,它们用其他方式是不可能放在字符串里的。转义字符包含一个倒斜杠(\),紧跟着是想要添加到字符串中的字符。(尽管它包含两个字符,但大家公认它是一个转义字符。)例如,单引号的转义字符是\’。你可以在单引号开始和结束的字符串中使用它。为了看看转义字符的效果,在交互式环境中输入以下代码:

      >>> spam = 'Say hi to Bob\'s mother.'

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

  表6-1列出了可用的转义字符。

转义字符 打印为
\’ 单引号
\” 双引号
\t 制表符
\n 换行符
\\ 倒斜杠

    在交互式环境中输入以下代码:

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

2、原始字符串
  可以在字符串开始的引号之前加上r,使它成为原始字符串。“原始字符串”完全忽略所有的转义字符,打印出字符串中所有的倒斜杠。例如,在交互式环境中输入以下代码:

>>> print(r'That is Carol\'s cat.')
That is Carol\'s cat.

3、用三重引号的多行字符串
  虽然可以用\n转义字符将换行放入一个字符串,但使用多行字符串通常更容易。在Python中,多行字符串的起止是3个单引号或3个双引号。“三重引号”之间的所有引号、制表符或换行,都被认为是字符串的一部分。Python的代码块缩进规则不适用于多行字符串。

  打开文件编辑器,输入以下代码:

print('''Dear Alice,

Eve's cat has been arrested for catnapping, cat burglary, and extortion.

Sincerely,
Bob''')

  将该程序保存为catnapping.py并运行。输出看起来像这样:

Dear Alice,

Eve's cat has been arrested for catnapping, cat burglary, and extortion.

Sincerely,
Bob

  请注意,Eve’s中的单引号字符不需要转义。在原始字符串中,转义单引号和双引号是可选的。下面的print()调用将打印出同样的文本,但没有使用多行字符串:

print('Dear Alice,\n\nEve\'s cat has been arrested for catnapping, cat
burglary, and extortion.\n\nSincerely,\nBob')

4、多行注释
  虽然井号字符(#)表示这一行是注释,但多行字符串常常用作多行注释。下面是完全有效的Python代码:

"""This is a test Python program.
Written by Al Sweigart al@inventwithpython.com
This program was designed for Python 3, not Python 2.
"""
def spam():
    """This is a multiline comment to help
    explain what the spam() function does."""
    print('Hello!')
spam()

5、字符串下标和切片
  字符计数包含了空格和感叹号,所以’Hello world!’有12个字符,H的下标是0,!的下标是11。在交互式环境中输入以下代码:

>>> spam = 'Hello world!'
>>> spam[0]
'H'
>>> spam[4]
'o'
>>> spam[-1]
'!'
>>> spam[0:5]
'Hello'
>>> spam[:5]
'Hello'
>>> spam[6:]
'world!'

  如果指定一个下标,你将得到字符串在该处的字符。如果用一个下标和另一个下标指定一个范围,开始下标将被包含,结束下标则不包含。因此,如果spam是’Hello world!’,spam[0:5]就是’Hello’。通过spam[0:5]得到的子字符串,将包含spam[0]到spam[4]的全部内容,而不包括下标5处的空格。

6、字符串的in和not in操作符
  像列表一样,in和not in操作符也可以用于字符串。用in或not in连接两个字符串得到的表达式,将求值为布尔值True或False。在交互式环境中输入以下代码:

>>> 'Hello' in 'Hello World'
True
>>> 'Hello' in 'Hello'
True
>>> 'HELLO' in 'Hello World'
False
>>> '' in 'spam'
True
>>> 'cats' not in 'cats and dogs'
False

这些表达式测试第一个字符串(精确匹配,区分大小写)是否在第二个字符串中。

7、字符串方法upper()、lower()、isupper()和islower()
  upper()和lower()字符串方法返回一个新字符串,其中原字符串的所有字母都被相应地转换为大写或小写。字符串中非字母字符保持不变。
  在交互式环境中输入以下代码:

>>> spam = 'Hello world!'
>>> spam = spam.upper()
>>> spam
'HELLO WORLD!'
>>> spam = spam.lower()
>>> spam
'hello world!'

请注意,这些方法没有改变字符串本身,而是返回一个新字符串。如果你希望改变原来的字符串,就必须在该字符串上调用upper()或lower(),然后将这个新字符串赋给保存原来字符串的变量。这就是为什么必须使用 spam = spam.upper(),才能改变spam中的字符串,而不是仅仅使用spam.upper()(这就好比,如果变量eggs中包含值10,写下eggs + 3并不会改变eggs的值,但是eggs = eggs + 3会改变eggs的值)。 如果字符串至少有一个字母,并且所有字母都是大写或小写, ==isupper()和islower()== 方法就会相应地返回布尔值True。否则,该方法返回False。在交互式环境中输入以下代码,并注意每个方法调用的返回值:

>>> spam = 'Hello world!'
>>> spam.islower()
False
>>> spam.isupper()
False
>>> 'HELLO'.isupper()
True
>>> 'abc12345'.islower()
True
>>> '12345'.islower()
False
>>> '12345'.isupper()
False

因为upper()和lower()字符串方法本身返回字符串,所以也可以在“那些”返回的字符串上继续调用字符串方法。这样做的表达式看起来就像方法调用链。在交互式环境中输入以下代码:

>>> 'Hello'.upper()
'HELLO'
>>> 'Hello'.upper().lower()
'hello'
>>> 'Hello'.upper().lower().upper()
'HELLO'

8、isX字符串方法   除了islower()和isupper(),还有几个字符串方法,它们的名字以is开始。这些方法返回一个布尔值,描述了字符串的特点。下面是一些常用的isX字符串方法:
isalpha()返回True,如果字符串只包含字母,并且非空;
isalnum()返回True,如果字符串只包含字母和数字,并且非空;
isdecimal()返回True,如果字符串只包含数字字符,并且非空;
isspace()返回True,如果字符串只包含空格、制表符和换行,并且非空;
.istitle()返回True,如果字符串仅包含以大写字母开头、后面都是小写字母的单词。

9、字符串方法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

10、字符串方法join()和split()   如果有一个字符串列表,需要将它们连接起来,成为一个单独的字符串,join()方法就很有用。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()方法是针对一个字符串而调用的,并且传入一个列表值(很容易不小心用其他的方式调用它)。split()方法做的事情正好相反:它针对一个字符串调用,返回一个字符串列表。在交互式环境中输入以下代码:

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

默认情况下,字符串’My name is Simon’按照各种空白字符分割,诸如空格、制表符或换行符。这些空白字符不包含在返回列表的字符串中。也可以向split()方法传入一个分割字符串,指定它按照不同的字符串分割。例如,在交互式环境中输入以下代码:

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

一个常见的split()用法,是按照换行符分割多行字符串。在交互式环境中输入以下代码:

>>> spam = '''Dear Alice,
How have you been? I am fine.
There is a container in the fridge
that is labeled "Milk Experiment".
Please do not drink it.
Sincerely,
Bob'''
>>> spam.split('\n')
['Dear Alice,', 'How have you been? I am fine.', 'There is a container in the
fridge', 'that is labeled "Milk Experiment".', '', 'Please do not drink it.',
'Sincerely,', 'Bob']

向split()方法传入参数’\n’,我们按照换行符分割变量中存储的多行字符串,返回列表中的每个表项,对应于字符串中的一行。

11、用rjust()、ljust()和center()方法对齐文本
  rjust()和ljust()字符串方法返回调用它们的字符串的填充版本,通过插入空格来对齐文本。这两个方法的第一个参数是一个整数长度,用于对齐字符串。在交互式环境中输入以下代码:

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

‘Hello’.rjust(10)是说我们希望右对齐,将’Hello’放在一个长度为10的字符串中。’Hello’有5个字符,所以左边会加上5个空格,得到一个10个字符的字符串,实现’Hello’右对齐。
  rjust()和ljust()方法的第二个可选参数将指定一个填充字符,取代空格字符。在交互式环境中输入以下代码:

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

center()字符串方法与ljust()与rjust()类似,但它让文本居中,而不是左对齐或右对齐。在交互式环境中输入以下代码:

>>> 'Hello'.center(20)
'       Hello '
>>> 'Hello'.center(20, '=')
'=======Hello========'

如果需要打印表格式数据,留出正确的空格,这些方法就特别有用。打开一个新的文件编辑器窗口,输入以下代码,并保存为picnicTable.py:

def printPicnic(itemsDict, leftWidth, rightWidth):
    print('PICNIC ITEMS'.center(leftWidth + rightWidth, '-'))
    for k, v in itemsDict.items():
        print(k.ljust(leftWidth, '.') + str(v).rjust(rightWidth))
picnicItems = {'sandwiches': 4, 'apples': 12, 'cups': 4, 'cookies': 8000}
printPicnic(picnicItems, 12, 5)
printPicnic(picnicItems, 20, 6)

在这个程序中,我们定义了printPicnic()方法,它接受一个信息的字典,并利用center()、ljust()和rjust(),以一种干净对齐的表格形式显示这些信息。

---PICNIC ITEMS--
sandwiches.. 4
apples...... 12
cups........ 4
cookies..... 8000
-------PICNIC ITEMS-------
sandwiches.......... 4
apples.............. 12
cups................ 4
cookies............. 8000

12、用strip()、rstrip()和lstrip()删除空白字符
  有时候你希望删除字符串左边、右边或两边的空白字符(空格、制表符和换行符)。strip()字符串方法将返回一个新的字符串,它的开头或末尾都没有空白字符。lstrip()和rstrip()方法将相应删除左边或右边的空白字符。
  在交互式环境中输入以下代码:

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

  有一个可选的字符串参数,指定两边的哪些字符应该删除。在交互式环境中输入以下代码:

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

向strip()方法传入参数’ampS’,告诉它在变量中存储的字符串两端,删除出现的a、m、p和大写的S。传入strip()方法的字符串中,字符的顺序并不重要:strip(‘ampS’)做的事情和strip(‘mapS’)或strip(‘Spam’)一样。

13、用pyperclip模块拷贝粘贴字符串
  pyperclip模块有copy()和paste()函数,可以向计算机的剪贴板发送文本,或从它接收文本。将程序的输出发送到剪贴板,使它很容易粘贴到邮件、文字处理程序或其他软件中。pyperclip模块不是Python自带的。要安装它,请遵从附录A中安装第三方模块的指南。安装pyperclip模块后,在交互式环境中输入以下代码:

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

14、口令保管箱
  sys是Python的一个「标准库」,也就是官方出的「模块」,是「System」的简写,封装了一些系统的信息和接口,官方的文档请戳:27.1. sys — System-specific parameters and functions,中文版的可以参考:[python] sys模块

  再说说argv这个变量。
  argv」是「argument variable」参数变量的简写形式,一般在命令行调用的时候由系统传递给程序。这个变量其实是一个List列表,argv[0] 一般是被调用的脚本文件名或全路径,和操作系统有关,argv[1]和以后就是传入的数据了。


版权声明:本文由 Duter2016 在 2019年09月29日发表。本文采用CC BY-NC-SA 4.0许可协议,非商业转载请注明出处,不得用于商业目的。
文章题目及链接:《「Python教程10」字符串操作》




  相关文章:

「游客及非Github用户留言」:

「Github登录用户留言」:

TOP