Python
参考文献
数据类型
- 数字
- 字符串
- 元组
- 列表
- 集合
- 字典
运算符
-
//
- 向下取整除法的运算符
1
2
3
4
517 / 3 # classic division returns a float
5.666666666666667
17 // 3 # floor division discards the fractional part
5 -
``
- 乘方
1
2
3
45 ** 2 # 5 squared
25
2 ** 7 # 2 to the power of 7
128
字符串
-
如果不希望前置
\
的字符转义成特殊字符,可以使用 原始字符串,在引号前添加r
即可:1
2
3
4
5print('C:\some\name') # here \n means newline!
C:\some
ame
print(r'C:\some\name') # note the r before the quote
C:\some\name
字符串format()
方法
1 | print('We are the {} who say "{}!"'.format('knights', 'Ni')) |
索引
-
索引还支持负数,用负数索引时,从右边开始计数:
1
2
3
4
5
6
7
8
9
10
11>>> word = 'Python'
>>> word[0] # character in position 0
'P'
>>> word[5] # character in position 5
'n'
>>> word[-1] # last character
'n'
>>> word[-2] # second-last character
'o'
>>> word[-6]
'P'
切片
-
切片索引的默认值很有用;省略开始索引时,默认值为 0,省略结束索引时,默认为到字符串的结尾:
1
2
3
40:2] # characters from position 0 (included) to 2 (excluded) word[
'Py'
2:5] # characters from position 2 (included) to 5 (excluded) word[
'tho' -
索引指向的是字符 之间 ,第一个字符的左侧标为 0,最后一个字符的右侧标为n ,n 是字符串长度.例如:
1
2
3
4
5+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
流程控制
分支结构
1 | x = 20 |
循环结构
1 | start = 1 |
1 | total = list(range(1,11)) # 定义一个1-10 的列表 |
列表
方法
list.append(x)
- 在列表末尾添加一个元素,相当于
a[len(a):] = [x]
.
- 在列表末尾添加一个元素,相当于
-
list.extend(iterable)
- 用可迭代对象的元素扩展列表.相当于
a[len(a):] = iterable
.
- 用可迭代对象的元素扩展列表.相当于
-
list.insert(i, x)
- 在指定位置插入元素.第一个参数是插入元素的索引,因此,
a.insert(0, x)
在列表开头插入元素,a.insert(len(a), x)
等同于a.append(x)
.
- 在指定位置插入元素.第一个参数是插入元素的索引,因此,
-
list.remove(x)
- 从列表中删除第一个值为 x 的元素.未找到指定元素时,触发
ValueError
异常.
- 从列表中删除第一个值为 x 的元素.未找到指定元素时,触发
-
list.pop([i])
- 删除列表中指定位置的元素,并返回被删除的元素.未指定位置时,
a.pop()
删除并返回列表的最后一个元素.(方法签名中 i 两边的方括号表示该参数是可选的,不是要求输入方括号).
- 删除列表中指定位置的元素,并返回被删除的元素.未指定位置时,
-
list.clear()
- 删除列表里的所有元素,相当于
del a[:]
.
- 删除列表里的所有元素,相当于
-
list.index(x[, start[, end]])
- 返回列表中第一个值为 x 的元素的零基索引.未找到指定元素时,触发
ValueError
异常.可选参数 start 和 end 是切片符号,用于将搜索限制为列表的特定子序列.返回的索引是相对于整个序列的开始计算的,而不是 start 参数.
- 返回列表中第一个值为 x 的元素的零基索引.未找到指定元素时,触发
-
list.count(x)
- 返回列表中元素 x 出现的次数.
-
list.sort(*, key=None, reverse=False)
- 就地排序列表中的元素
-
list.reverse()
- 翻转列表中的元素.
-
list.copy()
- 返回列表的浅拷贝.相当于
a[:]
.
- 返回列表的浅拷贝.相当于
操作系统接口
1 | import os |
-
对于日常文件和目录管理任务,
shutil
模块提供了更易于使用的更高级别的接口1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17import shutil
shutil.copyfile('data.db', 'archive.db')
#'archive.db'
shutil.move('/build/executables', 'installdir')
#'installdir'
import os, shutil
if os.path.isfile("unwanted-file.txt"):
os.remove("unwanted-file.txt")
if os.path.isdir("empty-dir"):
os.rmdir("empty-dir")
if os.path.isdir("nonempty-dir"):
shutil.rmtree("nonempty-dir")
引用模块/包:import
1 | # 导入一个模块 |
日志组件
1 | #format参数中可能用到的格式化串 |
1 | import logging |
生成requirements.txt
1 | # 安装 |
正则表达式
re.match
函数
-
re.match
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none. -
语法:
1
re.match(pattern, string, flags=0)
参数 描述 pattern
匹配的正则表达式 string
要匹配的字符串. flags
标志位,用于控制正则表达式的匹配方式,如: 是否区分大小写,多行匹配等等. -
可以使用
group(num)
或groups()
匹配对象函数来获取匹配表达式匹配对象方法 描述 group(num=0)
匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组. groups()
返回一个包含所有小组字符串的元组,从 1 到 所含的小组号.
re.search
方法
-
re.search
扫描整个字符串并返回第一个成功的匹配.匹配成功re.search方法返回一个匹配的对象,否则返回None. -
语法:
1
re.search(pattern, string, flags=0)
参数 描述 pattern
匹配的正则表达式 string
要匹配的字符串. flags
标志位,用于控制正则表达式的匹配方式,如: 是否区分大小写,多行匹配等等.
re.match
与re.search
的区别
- re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配.
检索和替换
-
Python 的 re 模块提供了re.sub用于替换字符串中的匹配项.
-
语法:
1
re.sub(pattern, repl, string, count=0, flags=0)
参数 描述 pattern
正则中的模式字符串 repl
替换的字符串,也可为一个函数 string
要被查找替换的原始字符串 count
模式匹配后替换的最大次数,默认 0 表示替换所有的匹配
re.compile
函数
-
compile
函数用于编译正则表达式,生成一个正则表达式(Pattern )对象,供 match() 和 search() 这两个函数使用. -
语法:
1
re.compile(pattern[, flags])
参数 描述 pattern
一个字符串形式的正则表达式 flags
可选,表示匹配模式,比如忽略大小写,多行模式等
findall
函数
-
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表.
-
**注意: **
match
和search
是匹配一次findall
匹配所有. -
语法:
1
findall(string[, pos[, endpos]])
参数 描述 string
待匹配的字符串 pos
可选参数,指定字符串的起始位置,默认为 0 endpos
可选参数,指定字符串的结束位置,默认为字符串的长度
re.finditer
函数
-
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回.
-
语法
1
re.finditer(pattern, string, flags=0)
参数 描述 `pattern 匹配的正则表达式 string
要匹配的字符串. flags
标志位,用于控制正则表达式的匹配方式,如: 是否区分大小写,多行匹配等等
re.split
函数
-
split 方法按照能够匹配的子串将字符串分割后返回列表
-
语法:
1
re.split(pattern, string[, maxsplit=0, flags=0])
参数 描述 pattern
匹配的正则表达式 string
要匹配的字符串. maxsplit
分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数. flags
标志位,用于控制正则表达式的匹配方式,如: 是否区分大小写,多行匹配等等.
正则表达式修饰符 - 可选标志
-
正则表达式可以包含一些可选标志修饰符来控制匹配的模式.修饰符被指定为一个可选的标志.多个标志可以通过按位 OR(|) 它们来指定.如 re.I | re.M 被设置成 I 和 M 标志:
修饰符 描述 re.I
使匹配对大小写不敏感 re.L
做本地化识别(locale-aware)匹配 re.M
多行匹配,影响 ^ 和 $ re.S
使 . 匹配包括换行在内的所有字符 re.U
根据Unicode字符集解析字符.这个标志影响 \w, \W, \b, \B. re.X
该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解.
示例
获取当前主机IP
1 | import socket |
判断文件是否存在
1 | import os |
读写文件
1 | f = open('workfile', 'w', encoding="utf-8") |
- 第一个实参是文件名字符串.第二个实参是包含描述文件使用方式字符的字符串.
- mode 的值包括 ‘r’ ,表示文件只能读取;‘w’ 表示只能写入(现有同名文件会被覆盖);‘a’ 表示打开文件并追加内容,任何写入的数据会自动添加到文件末尾.‘r+’ 表示打开文件进行读写.mode 实参是可选的,省略时的默认值为 ‘r’.
1 | with open('workfile', encoding="utf-8") as f: |
- 在处理文件对象时,最好使用
with
关键字.优点是,子句体结束后,文件会正确关闭,即便触发异常也可以.而且,使用with
相比等效的try-finally
代码块要简短得多
使用正则表达式规整数据
1 | import re |