20220718 今日python学习
本篇文章代码来自《Python编程快速上手——让繁琐工作自动化》
文本是程序需要处理的最常见的数据形式。
处理字符串
字符串字面量
在python中输入字符串相当简单的:它们以单引号开始和结束。
双引号
字符串可以用双引号开始和结束。使用双引号的一个好处,就是字符串中可以使用单引号字符。
spam = "That is Alice's cat."
因为字符串以双引号开始,所以Python知道单引号是字符串的一部分,而不是表示字符串的结束。
转义字符
“转义字符”让你输入一些字符,它们用其他方式是不可能放在字符串里的。转义字符包含一个倒斜杠(\)。
spam = 'Say hi to Bob\'s mother '
原始字符串
”原始字符串“完全忽略所有的转义字符,打印出字符串中的所有倒斜杠
print(r'That is carol\'s cat.')
用三重引号的多行字符串
在Python中,多行字符串的起止是3个单引号或3个双引号。”三重引号“之间的所有引号、制表符或换行,都被认为是字符串的一部分。Python的代码块缩进规则不适用于多行字符串。
多行注释
虽然#号表示这一行是注释,但多行字符串常常用作多行注释。
字符串下标和切片
字符串像列表一样,使用下标和切片。可以将字符串’Hello world!‘看成是一个列表,字符串中的每个字符都是一个表项,有对应的下标。
字符计数包含了空格和感叹号,所以'Hello world!'有12个字符,H的下标是0,!的下标是11。
请注意,字符串切片并没有修改原来的字符串。可以从一个变量中获取切片,记录在另一个变量中。
字符串的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
有用的字符串方法
字符串方法upper()、lower()、isupper()和islower()
upper()和lower()字符串方法返回一个新字符串,其中原字符串的所有字母都被相应地转换为大写或小写。字符串中非字母字符保持不变。
>>> spam = 'Hello world!' >>> spam = spam.upper() >>> spam 'HELLO WORLD!' >>> spam = spam.lower() >>> spam 'hello world!'
请注意,这些方法没有改变字符本身,而是返回一个新字符串。
如果字符串只有字母,并且所有字母都是大写或小写,isupper()和islower()方法就会相应的返回布尔值True,否则, 该方法放回False。
>>> spam = 'Hello world!' >>> spam.islower() False >>> spam.isupper() False >>> 'HELLO'.isupper() True >>> 'abc12345'.islower() True
因为upper()和lower()字符串本身返回字符串,所以也可以在返回的字符串上继续调用字符串方法。
>>> 'Hello'.upper() 'HELLO' >>> 'Hello'.upper().lower() 'hello' >>> 'Hello'.upper().lower().islower() True
isX字符串方法
这些方法返回一个布尔值,描述了字符串的特点。
isalpha()返回True,如果字符串只包含字母,并且非空。
isalnum()返回True,如果字符串只包含字母和数字,并且非空。
isdecimal()返回True,如果字符串只包含数字字符,并且非空;
isspace()返回True,如果字符串只包含空格、制表符和换行,并且非空;
istitle()返回True,如果字符串仅包含以大写字母开头、后面都是小写字母的单词
字符串方法startswith()和endswith()
startswith()和endswith()方法返回True,如果它们所调用的字符串以该方法传入的字符串开始或结束。否则,方法返回False。
>>> 'Hello word!'.startswith('Hello') True >>> 'Hello word!'.endswith('world!') True >>> 'abc123'.startswith('12') False >>> 'abc123'.endswith('12') False
字符串方法join()和split()
join()方法在一个字符串上调用,参数是一个字符串列表,返回一个字符串。返回的字符串由传入的列表中每个字符串连接而成。
>>> ', '.join(['cats', 'rats', 'bats']) 'cats, rats, bats >>> ' '.join(['My', 'name', 'is', 'Simon']) 'My name is Simon'
请注意,调用join()方法的字符串,被插入到列表参数中每个字符串的中间。要记住,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']
用rjust()、ljust()和center()方法对齐文本
rjuest()和ljust()字符串方法返回调用它们的字符串的填充版本,通过插入空格来对齐文本。这两个方法的第一个参数是一个整数长度,用于对其字符。
>>> 'Hello'.rjust(10) ' Hello' >>> 'Hello'.rjust(20) ' Hello' >>> 'Hello World'.rjust(20) ' Hello World' >>> 'Hello'.ljust(10) 'Hello '
rjust()和ljust()方法的第二个可选参数将指定一个填充字符,取代空格字符。
>>> 'Hello'.rjust(20, '*') '***************Hello' >>> 'Hello'.ljust(20, '-') 'Hello---------------'
center()字符串方法与ljust()与rjust()类似,但它让文本居中,而不是左对齐或右对齐。
>>> 'Hello'.rjust(20, '*') '***************Hello' >>> 'Hello'.ljust(20, '-') 'Hello---------------'
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': 80000} printPicnic(picnicItems, 12, 5) printPicnic(picnicItems, 20, 5)
用strip()、rstrip()和lstrip()删除空白字符
strip()字符串方法将放回一个新的字符串,它的开头或末尾都没有空白字符。
rstrip()和lstrip()方法将删除左边或右边额空白字符。
用pyperclip模块考本粘贴字符串
程序练习脚本:
pw.py程序功能:利用一个主控口令,解锁口令管理器。然后将某个账户口令拷贝到剪切板,再将它粘贴到网站的口令输入框。
#! python3 # pw.py - An insecure password locker program. PASSWORDS = {'email': '123123123', 'blog': '123123123123', 'luggage': '123123123'} import sys, pyperclip if len(sys.argv) < 2: print('Usage: python pw.py [account] - copy account ' 'password') sys.exit() account = sys.argv[1] if account in PASSWORDS: pyperclip.copy(PASSWORDS[account]) print('Password for ' + account + ' copied to clipdoard') else: print('There is no account named ' + account)
使用模块:
1)sys.argv列表中的第一项总是一个字符串(它包含程序的文件名)。第二项是第一个命令行参数;
2)pyperclip模块有copy()和paste()函数,可以向计算机的剪贴板发送文本,或从它接收文本;
bulletPointAdder.py程序功能:它将取代剪贴板上的文本,新的文本每一行都以星号开始
#!python3 #bulletPointAdder.py - Adds Wikipedia bullet points to the start # of each line of text on the clipboard import pyperclip text = pyperclip.paste() #TODO: Separate lines and add starts lines = text.split('\n') for i in range(len(lines)): lines[i] = '* ' + lines[i] text = '\n'.join(lines) pyperclip.copy(text)