‘Hello’, end = ‘’(在字符串的末尾令下一行接着本行字符串的末尾)
‘Hello’, sep=’ ,’(用逗号替换掉默认的空格分隔符)
Random.randint(a,b)从a到b的随机数
Try except用来处理错误
4.列表:
a = a +[b]
列表加列表需要中括号
Len取得列表长度
del spam [ ]从列表删除值(下标)
for 变量 in 列表:
in和not in可以确定值是否在列表中
spam.index (‘字符’)查找字符在列表中的值
spam.append(‘’)插入末尾
spam.insert(数字,‘ ’)插入数字所在的位置
spam.remove(‘ ’)从列表删除值(值)
spam.sort()将列表的值排序(asc2码排序)
spam.sort(reserve=True)将列表的值倒序排序(asc2码排序)
spam.sort(key=str.lower)将列表的值排序(普通字典排序)这将导致 sort()方法将列表中所有的表项当成小写,但实际上并不会改变它们在列表中的值。
可以在行末使用续行字符\,将一条指令写成多行
Eg: print('Four score and seven ' + \
'years ago...')
Four score and seven years ago...
元组与列表唯二不一样:
1.元组用圆括号,列表用方括号
2.元组像字符串一样,数值是不可改变的
>>> type(('hello',)) 括号后加逗号表明这是一个元组(仅有一个值时)
<class 'tuple'>
>>> type(('hello'))
<class 'str'>
Turple([‘ ’,’ ’,’ ’])元组换列表
List((‘ ’,’ ’,’ ’))列表换元组
Copy.copy()Copy相当于给物品贴标签
Copy.deepcopy()deepcopy才是一次真正的复制
如果要复制的列表中包含了列表,那就使用 copy.deepcopy()函数来代替。deepcopy()函数将同时复制它们内部的列表
Deepcopy完全独立,但是copy还是会随原来数组变化。
第五章
字典没有顺序,但是列表有顺序
列表名字.keys()键
列表名字.values()值
列表名字.items()键值对
For a in spam.keys():
Print(a)
输出键
>>> spam = {'color': 'red', 'age': 42} >>> for k, v in spam.items():
print('Key: ' + k + ' Value: ' + str(v))
也可以利用多重赋值的技巧,在 for 循环中将键和值赋给不同的变量。
Key: age Value: 42
Key: color Value: red
Get()的用法:
Str(字典名字.get(‘key值’,(如果字典中没有此数据的备用值))),例如:
str(picnicItems(列表).get('cups(键)', 0)) + ' cups.'
setdefault第一个参数,是要检查的键。第二个参数,是如果该键不存在时要设置的值。
列表名字.stedefault(‘参数1’,’参数2’)
Setdefault用于用key查找value或者加入新的字典键值对
Setdefault常用操作:
for character(元素) in message(列表):
count.setdefault(character, 0)
count[character] = count[character] + 1
print(count)
get和setdefault的区别:setdefault可以设置新的key和value但是get不能(只可以赋值为0)
6.字符串操作
几种方法来输入带有引号的字符串:
- 双引号:"That is Alice's cat."
- 转义字符:'Say hi to Bob\'s mother.'
\' ——》 单引号
\" ——》 双引号
\t ——》 制表符
\n ——》 换行符
\\ ——》 倒斜杠
- 原始字符串
可以在字符串开始的引号之前加上 r,使它成为原始字符串:
print(r'That is Carol\'s cat.')
That is Carol\'s cat.
- 三重引号的多行字符串:
多行字符串的起止是 3 个单引号或 3 个双引号。“三重引号”之间的
所有引号、制表符或换行,都被认为是字符串的一部分。
三重引号还可以用于多行注释
字符串名.upper()小写换大写
字符串名.lower()大写换小写
字符串名.isupper()检验是否大写
字符串名.islower()检验是否小写
isalpha()返回 True,如果字符串只包含字母,并且非空;
isalnum()返回 True,如果字符串只包含字母和数字,并且非空;
isdecimal()返回 True,如果字符串只包含数字字符,并且非空;
isspace()返回 True,如果字符串只包含空格、制表符和换行,并且非空;
istitle()返回 True,如果字符串仅包含以大写字母开头、后面都是小写字母的单词
istitle特例:'This Is Title Case 123'.istitle()
True
startswith()和 endswith()只需要检查字符串的开始或结束部分是否等于另一个字符串
字符串方法 join()和 split():
‘xxyy’.join把列表中的字符串用xxyy连接起来
例子:', '.join(['cats', 'rats', 'bats'])
'cats, rats, bats'
.spilt(‘xxyy’)把一个字符串以xxyy断开分割成几个字符串
用 rjust()、ljust()和 center()方法对齐文本
字符串.rjust(x,‘y’):左边空(x-字符串个数)个y
字符串.ljust(x,‘y’):右边空(x-字符串个数)个y
y可以有可以无,若没有y则填充空格
字符串.center(x,‘y’):左边右边各空(x-字符串个数) /2个y
同理,y可有可无
用 strip()、rstrip()和 lstrip()删除空白字符
strip()字符串方法将返回一个新的字符串,它的开头或末尾都没有空白字符。
lstrip()和 rstrip()方法将相应删除左边或右边的空白字符。
字符串.strip(‘abcd’)中,abcd的顺序不重要,但大小写顺序一定要统一
用 pyperclip 模块拷贝粘贴字符串
pyperclip.copy('Hello world!')
>>> pyperclip.paste()
'Hello world!'
如果你的程序之外的某个程序改变了剪贴板的内容,paste()函数就会返
回它。
第七章。模式匹配与正则表达式
正则表达式,例如:\d\d\d-\d\d\d-\d\d\d\d可以表示成\d{3}-\d{3}-\d{4}
\d代表一个数字
导入正则表达式:import re
Re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')用于传入字符串值,表示正则表达式,表示为Regax对象
.search(‘文本’)查找传入的字符串,search会返回Match对象,如要调用可以用.group()函数
注意:要向re.compile传递原始字符串,\(和\)表示()
利用括号分组:例如(\d{3})-(\d{3}-\d{4}),则.group(1)对应第一个括号,.group(2)对应第二个括号
获取所有分组用.groups()的方法
多重赋值技巧:
A,b = 文件名.groups()
字符|称为“管道”。希望匹配许多表达式中的一个时,就可以使用它。例如,
正则表达式 r'Batman|Tina Fey'将匹配'Batman'或'Tina Fey'。 第一次出现的文本将会被首先返回
用问号实现可选匹配()?如果有就打印括号里的值,没有也会正常输出
用星号匹配零次或多次(a)*如果Match值中出现多次a可以全部匹配
用+号匹配一次或多次,与星号同理
用花括号匹配特定次数(){次数},(a){3,5}将匹配(aaa)(a{4})(a{5})
- {3,5}为贪心匹配最长,而(a){3,5}?为非贪心匹配自动匹配最短
作为 findall()方法的返回结果的总结,请记住下面两点:
1.如果调用在一个没有分组的正则表达式上,例如\d\d\d-\d\d\d-\d\d\d\d,方法
findall()将返回一个匹配字符串的列表,例如['415-555-9999', '212-555-0000']。
2.如果调用在一个有分组的正则表达式上,例如(\d\d\d)-(\d\d\d)-(\d\d\d\d),方
法 findall()将返回一个字符串的元组的列表(每个分组对应一个字符串),例如[('415',
'555', '1122'), ('212', '555', '0000')]。
字符分类:缩写字符分类 表示
\d 0 到 9 的任何数字
\D 除 0 到 9 的数字以外的任何字符
\w 任何字母、数字或下划线字符(可以认为是匹配“单词”字符)
\W 除字母、数字和下划线以外的任何字符
\s 空格、制表符或换行符(可以认为是匹配“空白”字符)
\S 除空格、制表符和换行符以外的任何字符
字符后加上+号可以匹配多个字符
(r’[xxyyzz]’)用方括号定义自己的字符分类。例如,字符分类[aeiouAEIOU]将匹配所有元音字符,不论大小写,可以用短横表示范围[a-zA-Z0-9]表示所有字母大小写和数字
在左方括号后加上^字符,可以得到不在方括号内的所有字符
(r‘^xxyy’)表示匹配以xxyy开始的字符串
(r’xxyy$’)表示匹配以xxyy结尾的字符串
在正则表达式中,.(句点)字符称为“通配符”。re.compile(r'.at') 句点只能匹配一个st前的除换行符以外的字符
用点-星匹配所有字符
Re.compile(r‘First Name: (.*) Last Name: (.*)’)匹配文本中Name后的所有字符,若想用非贪心算法,则在星号后加问号
(‘.*’,re.DOTALL)可以匹配所有字符,包括换行符。
如上行格式,re.IGNORECASE或者re.I可以无视字母的大小写
用sub方法替换字符串
sub()方法需要传入两个参数。第一个参数是一个字符串,用于取代发现的匹
配。第二个参数是一个字符串,即正则表达式。sub()方法返回替换完成后的字符串。
参数需要加上单引号,参数之间用逗号隔开。
>>> namesRegex = re.compile(r'Agent \w+') 意思是单词后面空格加上\w+意思为此单词删除,后面的单词被新单词替换
namesRegex.sub('CENSORED', 'Agent Alice gave the secret documents to Agent Bob.')
假如想隐去姓名,只显示姓名的第一个字母,可以用Agent (\w)\w*,传入 r'\1****'作为 sub()的第一个参数。字 符串中的\1 将由分组 1 匹配的文本所替代,也就是正则表达式的(\w)分组。 可以输入\1、\2、\3……。表示“在替换中输入分组 1、2、3……的文本”
agentNamesRegex = re.compile(r'Agent (\w)\w*')
忽略正则表达式字符串中的空白符和注释,可以向 re.compile() 传入变量 re.VERBOSE,作为第二个参数。
组合使用 re.IGNOREC ASE、re.DOTALL 和 re.VERBOSE
someRegexValue = re.compile('foo', re.IGNORECASE | re.DOTALL | re.VERBOSE)
ignorecase表示忽略大小写
Dotall表示让句点匹配所有字符(包括换行符)
verbose表示忽略字符中的空白字符串和#表达式