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模块考本粘贴字符串

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

程序练习脚本:

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)

 

posted @ 2022-07-18 15:07  Diligent_Maple  阅读(25)  评论(0编辑  收藏  举报