2020.3.7 open

发布于 2020-03-07  33 次阅读


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,如果没有声明会出现指定错误