python学习笔记之--文件操作
2022-03-06 本文已影响0人
itsenlin
文件
概念
在python中文件的概念与*nix系统很类似,文件只是连续的字节序列。
内建函数
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
返回一个file类型对象,参数很多,但是常用的有三个file
、mode
、encoding
-
file
: 必需,文件路径(相对或者绝对路径)。 -
mode
: 可选,文件打开模式,默认'r'
-
buffering
: 设置缓冲,有以下取值-
0
表示不缓冲 -
1
表示缓冲一行 -
>1
表示使用给定值为缓冲区大小 -
-1
表示使用系统默认缓冲
-
-
encoding
: 默认使用utf8
-
errors
: 报错级别 -
newline
: 区分换行符 -
closefd
: 传入的file参数类型 -
opener
: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。
文件操作模式
文件操作模式与C语言类似可以参考fopent()
接口
基本模式如下:
模式 | 说明 |
---|---|
r |
以读模式打开,指针指向文件开头 |
w 、x
|
以写模式打开:如果文件已存在x 模式会报错,而w 模式会清空原有内容重新写入;如果文件不存在,两种模式都会新建一个文件 |
a |
追加模式:如果该文件已存在,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 |
b |
二进制模式:不能单独使用,需要放在其他模式后面使用 |
+ |
可读可写模式:不能单独使用,需要放在其他模式后面使用 |
还有一些组合模式
模式 | 说明 |
---|---|
r+ 、w+ 、a+
|
以读写模式打开文件。区别:文件不存在时r+ 会报错,w+ 、a+ 会新建;文件存在时a+ 指针指向文件结尾,r+ 、w+ 指针指向文件开头 |
rb+ 、wb+ 、ab+
|
以二进制读写模式打开文件。区别:文件不存在时rb+ 会报错,wb+ 、ab+ 会新建;文件存在时ab+ 指向文件结尾,wb+ 、rb+ 指向文件开头 |
rb |
以二进制只读模式打开,指针会指向文件开头 |
wb 、ab
|
以二进制只写模式打开,区别:wb 模式指针指向文件开头;ab 模式指针指向文件结尾 |
文件操作
文件操作定式
文件操作一般是三个步骤
-
open
接口打开一个文件,返回一个file
对象 - 通过
file
对象对文件进行操作 - 调用
file
对象的close
接口关闭文件
第一步前面已经学习,这里学习下后面两步
文件对象
open
接口返回值是一个file
对象,文件的操作动作都需要依赖这个file
对象;可以分为以下四类
- 读操作
接口 | 说明 |
---|---|
file.read([size]) |
最多读取size个字节的数据放到字符串中返回,size不提供或者<0(默认-1),文件将读取到末尾 |
file.readline([size]) |
读取一行数据(包括行结束符),参数类似read 接口 |
file.readlines([size]) |
读取文件所有行,以字符串列表形式返回;若给定size>0,返回总和大约为size字节的行, 实际读取值可能比 size较大, 因为需要填充缓冲区 |
- 写操作
接口 | 说明 |
---|---|
file.write(str) |
将字符串写入文件,返回的是写入的字符长度。 |
file.writelines(list) |
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 |
file.flush() |
刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 |
- 指针移动操作
接口 | 说明 |
---|---|
file.tell() |
返回文件指针的位置 |
file.seek(offset[, whence]) |
移动文件读取指针到指定位置;offset表示偏移量,whence表示偏移的起始位置:0 代表从文件开头(默认);1 代表当前位置;2 代表文件末尾。 |
- 文件关闭
接口 | 说明 |
---|---|
file.close() |
关闭文件。关闭后文件不能再进行读写操作。 |
实例
try:
f = open("test.txt")
for line in f.readlines():
print(line)
except IOError as err:
print(f"find error when operate file: {err}")
else:
f.close()
例子中当文件存在时,打印文件内容;当文件不存在时,会打印find error when operate file: <具体的错误信息>
python语言中增加了一个上下文管理(with语句
)简化了这种文件操作,不需要使用异常处理,上面例子可以改造成如下:
with open("test.txt") as f:
for line in f:
print(line)
深入
标准文件
类似C语言,程序运行过程中有三个标准文件默认可用:
-
stdin
表示标准输入,一般键盘输入 -
stdout
表示标准输出,一般是显示器显示,带缓冲 -
stderr
表示标准错误,一般是显示器显示,不带缓冲
在python中使用时,需要依赖sys
模块:sys.stdin
、sys.stdout
和sys.stderr
文件系统操作
对于文件系统操作,像目录操作、文件权限操作、文件路径操作等在python的os
模块以及os.path
模块中