文件IO常用操作—python

1、文件打开操作—open
open(file, mode=’r’, buffering=-1, encoding=’None’, errors=None, closed=True, opener=None)
open操作位打开一个文件,并返回文件对象和文件描述符,如果打开失败,抛出异常。
(1)mode参数:
r:以只读模式打开。在在r模式下打开的文件只能进行read操作,打开时文件指针在文件文本的开头,当进行一次read操作之后,文件指针已经只想了文件末尾,再次read就没有内容了,但是不会报错
w:只写模式打开,如果文件不存在,则新建一个打开,如果已存在,则打开并清空
x:创建并写入一个新文件,如果文件存在则报错。x模式和w模式不同在于x模式只能是新建一个文件并写入,如果文件已存在,则报错。
a:追加模式文件不存在,则新建一个
mode模式还有三种附加模式:
t:以文本形式操作,为上方附加模式
b:以二进制形式操作
(2)buffering缓冲区:
在使用open命令时,buffering的默认值为-1,表示使用缺省大小的buffering,如果是二进制,使用io.DEFAULT_BUFFER_SIZE的值,默认为4096或者8192,这是操作系统的默认值,如果是文本模式,如果是终端设备,使用行缓冲的方式,如果不是终端,则使用二进制的策略。
buffering = 0表示只在二进制模式下使用,而且关闭flush
buffering = 1表示只在文本模式下使用,见到换行符就flush
buffering大于 1用于指定buffering的大小
(3)encoding编码格式
encoding仅在文本模式时使用,none表示使用缺省编码,缺省编码依赖于操作系统,在windows操作系统下默认为gbk编码,在linux操作系统下位utf-8
(4)其他参数
errors:表示什么样的编码错误将被捕获,None和strict表示有编码错误将抛出ValueError异常,ignore表示忽略异常
newline文本模式中,换行的转换。可以为None、空串、’\r’、’\n’、’\r\n’,当使用默认值None时,‘\r’,‘\n’,‘\r\n’都将被替换为’\n’,‘’表示不会自动转换通用的换行符,其他合法字符表示换行符就是指定字符,就会按照指定字符分行写时
closed关闭文件描述符,True表示关闭它,False表示会在文件关闭后保持这个描述符
2、文件的读写与关闭
f.read():读文件,在r模式和增强模式下可执行。read(size = -1)size表示读取的多少个字符或字节;复数或者None表示读取到EOF
f.write(‘xxx’):写操作,在w、x、a模式和增强模式下可执行。将指定字符串写入到文件中,并返回字符的个数
writelines(lines)将字符串列表写入文件
f.close():文件关闭操作,flush并关闭文件对象
f.readline():按行读取,readline(size = -1)按行读取文件内容。size设置一次能够读取行内几个字符或字节
f.readlines():多行读取,readlines(hint = -1)读取所有行的列表,指定hint则返回指定的行数
3、文件指针操作
对文件的读写等操作是通过文件指针的移动来完成的。当文件打开之后,就会有一个文件指针出现,r、w、x模式打开文件指针为0(文件开头),a模式打开指针在文件末尾(EOF),所有的文件操作都是从当前文件指针处开始。
tell()命令可以显示当前文件指针的位置
seek(offset[,whence])命令可以移动文件指针。其中sffset为文件指针偏移的字节数, whence为偏移的参考位置。seek指针对以t模式打开和以b模式打开有所不同
a) 文本模式:
在文本模式下,whence的缺省值为0,表示相对于文件开头,此时offset的值只能为正整数
whence = 0为默认值,表示相对于文件开头,此时offset值只能为正整数,可以超界
whence = 1表示在相对于指针当前位置,此时offset值只能为0,表示原地踏步
whence = 2表示相对于文件末尾,此时offset值只能为0,表示将指针移到文件末尾。
以下举例为英文模式,每一个英文字符在utf-8模式下都只占一个字符,所以offset移动字节数与字符数相同。

f = open('wang','r+')#打开文件‘wang’
print(f.read())#读文件,打印Nice to meet you! Nice to meet you, too! This is a greeting in English.
print(f.tell())#文件指针指向文件末尾,打印70
f.seek(0)#将文件指针指向文件开头等价于f.seek(0,0)相当于文件开头移动0字节
print(f.tell())#打印指针位置0

f.seek(0,2)#将文件指针指向文件末尾,注意,此时offset只能为0
print(f.tell())#打印70
f.seek(5)#等价于d.seek(5,0),相对于文件开头向右移动5个字节,
print(f.tell())#打印5
print(f.read())#打印to meet you!\nNice to meet you, too!This is a greeting in English.

f.close()#关闭文件

b) 字节模式:
二进制模式下
whence = 0 为缺省值,表示从文件头开始,offset为正整数,表示所移位数
whence = 1 表示从当前位置开始的位移数,小于0向左,大于0向右,可以在右方超界,但是左方不能超界
whence = 2 表示相对于末尾位置的位移数,正数向右,负数向左
由于字节模式不涉及编码解码格式,所以在字节模式下不会出现上方的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值