Python工具¶
with¶
with open(filename) as f:
text = f.read()
range()¶
range(n)生成[0, n)的列表range(i, j)生成[i, j)的列表range(i, j, k)生成[i, j)的等差列表,公差为k
谓词 all(), any()¶
nums = [55, 44, 33, 22, 11]
if all([i > 5 for i in nums]):
print("All larger than 5")
if any([i % 2 == 0 for i in nums]):
print("At least one is even")
遍历enumerate() 按键值对的方式遍历列表,返回元组¶
for v in enumerate(nums):
print(v)
itertools¶
count(value)从value开始向无穷计数cycle(iterable)开始iterable的无穷循环repeat()无限或有限次的重复chain(a, b, c)将 a, b, c 连接成一个列表[...a, ...b, ...c]
from itertools import count;
for i in count(3):
print(i);
if i > 10:
break
takewhile(pred, iterable)当谓词为真时继续循环chain()合并多个iterableaccumulate()返回累计值
from itertools import accumulate, takewhile
nums = list(accumulate(range(8)))
print(nums) # [0, 1, 3, 6, 10, 15, 21, 28]
print(list(takewhile(lambda x: x<= 6, nums))) # [0, 1, 3, 6]
product()permutation()
from itertools import product, permutations
letters = ("A", "B")
print(list(product(letters, range(2)))) # [('A', 0), ('A', 1), ('B', 0), ('B', 1)]
print(list(permutations(letters))) # [('A', 'B'), ('B', 'A')]
random¶
random.shuffle(listVar)
文件操作¶
open() and close()¶
# write mode
open("filename.txt", "w")
# read mode
open("filename.txt", "r")
open("filename.txt")
# binary write mode
open("filename.txt", "wb")
file.close()
保证close()方法最终被调用¶
使用异常处理机制:
try:
file = open("in.txt")
finally:
file.close()
使用with... as...机制:
with open("in.txt") as file:
printf(f.readlines())
read()¶
file = open("filename.txt", "r")
print(file.read(16)) # 按字节数量读取
print(file.read()) # 读取剩余文本
print(file.read()) # 输出空串
file.close()
file = open("filename.txt", "r")
print(file.readlines(16)) # 返回list,按行分割,元素中包含换行符
write()¶
file.write(content)
不附加换行符,返回写入文件的字符数量。
函数式编程¶
map(func, arg)¶
使用iterable对象作为第二个参数,返回对每个参数进行func后的iterable。
filter(pred, arg)¶
返回满足谓词的iterable对象。
正则表达式¶
import re
pattern = r'regular_expression'
基本工具
re.match(pattern, string)从字符串的开始尝试匹配模式,成功时返回match对象re.serach(pattern, string)扫描整个字符串,并返回第一个成功的匹配re.findall(pattern, string)返回所有匹配的子串
match示例
import re
pattern = r"pam"
match = re.search(pattern, "eggspamsausage")
if match:
print(match.group())
print(match.start())
print(match.end())
print(match.span())
"""
>>>
pam
4
7
(4, 7)
>>>
"""
搜索和替换 re.sub(pattern, repl, string, max=0)
import re
str = "My name is David. Hi David."
pattern = r"David"
newstr = re.sub(pattern, "Amy", str)
print(newstr)
正则元字符¶
.除换行符外的任意字符^,$匹配行的开头和行的结尾[aeiou],[a-z],[0-9]匹配字符组中的一个;使用[^A-Z]来取反(排除大写字母)*0个或更多前述字符+1个或更多前述字符?0个或1个前述字符pattern = r'ice(-)?cream'{x, y}[x, y]个前述字符|或\数字n匹配前一形式的n次后续重复 如r"(.+)\1"将匹配形如"word word", "abc abc"的字符串\d,\s,\w数字,空白字符或word characters;\D,\S,\W前述功能的取反\b匹配\w与\W之间的空字符串(non-word characters与word characters之间的空字符串)如\bcat\b会匹配“The cat sat!”和“We s>cat<\tered?”但不会匹配“We scattered.”\A与\Z分别输入的开头和结尾(与^和$区别)
Group¶
group(), group(0)返回整个匹配,group(n)返回第n个匹配的组
可以通过(?P<name>...)的形式声明命名的组,并通过group('name')来访问
可以通过(?...)的形式声明non-capture组,non-catpure组不能通过group函数来访问
搜索邮件地址
import re
pattern = r"([\w\.-]+)@([\w\.-]+)(\.[\w\.]+)"
str = "Please contact info@sololearn.com for assistance"
match = re.search(pattern, str)
if match:
print(match.group())