1.获取文件操作对象

读写文件就是请求操作系统打开一个文件对象,然后通过系统提供的接口读写数据。

f = open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

上述代码获取了一个文件对象f,注意操作结束后,要f.close()关闭文件

file:文件的路径

mode:文件打开模式

常见的模式有

模式

描述

b

二进制模式

r

以只读方式打开,指针放在文件开头

r+

读写方式打开,指针放在文件开头

rb

已二进制打开一个文件,只读

rb+

二进制打开一个文件,读写

w

写的方式打开一个文件,如果文件已经存在,则会被clear,如果不存在,会创建一个文件

w+

读写的方式打开一个文件,如果文件已经存在,则会被clear,如果不存在,会创建一个文件

wb+

读写的方式打开一个二进制文件,如果文件已经存在,则会被clear,如果不存在,会创建一个文件

a

追加的方式打开文件,如果文件已存在,指针会放在文件末尾,否则创建一个文件

a+

追加的方式打开文件,如果文件已存在,指针会放在文件末尾,否则创建一个文件

ab+

追加的方式打开二进制文件,如果文件已存在,指针会放在文件末尾,否则创建一个文件

buffering:设置缓冲

encoding:编码格式

errors:报错级别

newline:区分换行符

closefd:传入file参数

2.写文件

a. f.write(str1) 将字符串写入文件,返回的是写入的字符长度

b.f.writelines(list1) 写入一个字符串列表

写文件时,内容会先到缓冲区,等待系统空闲或者close时才会写入到文件中,推荐with的写法

l1 = [u'测试\n', 'test\n'] #需要添加换行符

f1.writelines(l1)

3.读文件

a.f.read(size) 读指定字节的内容,默认读取文件所有内容。注意读取到的指是str类型,如果需要运算要先进行转换。

b. f.readline() 读取一行,包括换行符

c. f.readlines(sizeint) 读取所有行,并且返回列表。若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区

4.其他

f.tell() 返回指针当前位置

f.seek(offset[,whence]) 移动指针到指定位置,

offset 偏移量,可以是负,代表从后向前移动

whence 偏移相对位置,0 开头位置 1 当前位置 2 文件结尾位置

例如 seek(x, 0) 从开始位置位移x

seek(x, 1) 从当前位置向后位移x

seek(-x, 2) 从结尾位置向前位移x

f.truncate(size)   (存疑)从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小。

5.关于异常

如果文件不存在,open()函数会抛出一个IOError异常错误。

其他异常待补充