Table of Contents
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
下图很好的总结了这几种模式:
模式 | r | r+ | w | w+ | a | a+ |
---|---|---|---|---|---|---|
读 | + | + | + | + | ||
写 | + | + | + | + | + | |
创建 | + | + | + | + | ||
覆盖 | + | + | ||||
指针在开始 | + | + | + | + | ||
指针在结尾 | + | + |
read读取文件
首先要创建,oepn("director/filename","r"),然后调用read(size),size为负数或者不填,就是全部读写
f.tell()查看当前位置
f.seek()
如果要改变文件当前的位置, 可以使用 f.seek(offset, from_what) 函数。
from_what 的值, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾,例如:
- seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符
- seek(x,1) : 表示从当前位置往后移动x个字符
- seek(-x,2):表示从文件的结尾往前移动x个字符
from_what 值为默认为0,即文件开头。下面给出一个完整的例子:
python装饰器
为什么用装饰器:可以在函数前后添加代码
python匿名函数
lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]
lambda 参数:运算,传递的实参,也可以赋值给变量,然后在调用
python闭包
使用:闭包就是当前不执行,调用时候在执行
闭包就是函数里面有函数,函数的返回值是内部函数
闭包中传递的参数,在函数调用后,还被内部的函数引用,所以不会被释放
如果代码在循环里面,循环的i变量没有释放,方法调用时候,i就是最大值,所以结果是错误的
返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。如果非要,在包裹一层函数
python解包
*,可以平均分(a *b c = [1,2,3,4]) b = [2,3]
_,可以将让读代码的人知道这个是没用的元素
*传递参数其实就是压包解包过程 *var, = 1,2,3,4
可变参数和关键字参数结合使用,代表任意参数,装饰器就这么用的
nonlocal a
#声明为非局部变量,到嵌套级查找变量a,如果没有声明会出现指定错误