博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

Python--基础文件读写操作

Posted on 2017-10-20 17:07  代码的味道是什么  阅读(262)  评论(0编辑  收藏  举报

1,open(),对文件进行读写操作之前,要先打开文件,获取文件的句柄

懒人专用方法,文件打开后不用关闭

with open(r'somefile.txt','r+',encoding='utf8') as f:

f.readlines()

1、open(file_name[,access_mode][,buffering])

(1)参数说明
file_name:一个包含了你要访问的文件路径及文件名称的字符串值。尽量使用绝对路径
access_mode:打开文件的方式:这个参数是非强制的,默认文件访问模式为只读(r)
r,只读
w:写之前会清空文件的内容
a:追加的方式,在原本内容中继续写
buffering:先写到缓存中
如果buffering的值被设置为0,就不会有寄存;如果值为1,访问文件时会缓存行;如果值位大于1的整数,表明了这就是寄存区的缓冲大小;如果取负值,寄存区的缓冲大小则为系统默认。该参数也是非强制性的。
(2)返回值
该语句表示返回的File_object是一个指向文件的指针(一个文件对象)文件句柄。当以只读模式(r)打开一个不存在的文件时,就会报IOError异常(文件不存在),但如果是以写或追加模式(w/a/a+)打开一个不存在的文件时,默认会创建该文件,但如果是所在路径中有目录不存在,也会报IOError异常
 
创建一个文件:
fp=open('d:\\tmp\\01.txt',w ) #创建并打开文件01.txt,用写的方式,文件句柄赋给fp
 
2、文件操作模式
r,w,a
r+:可读可写
w+:打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
 
rb wb ab 读写二进制
3,获取文件句柄后,就可以对文件进行操作了,常用操作方法
(1)fp.closed#判断文件是否已经关闭。返回true如果文件已被关闭,否则返回false
(2)fp.mode#输出读写模式。返回被打开文件的访问模式。
(3)fp.name#返回文件的名称。
(4)fp.close()#刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
(5)flush()#把缓冲区中的内容持久化写到磁盘里,缓存区写满的情况,系统会自动调用flush()方法。
(6)next()#返回下一行,并将文件操作标记位移到下一行。把一个file用于for ... in file这样的语句时,就是调用next()函数来实现遍历的
(7)seek(offset)#文件指针移动到oofset位置,空标识移动到0位置

文件的读取位置

有的时候我们只想读文件的一部分的内容,或者我们需要从文件的某个位置读数据,应该怎么操作呢,用seek()函数

file_obj.seek(offset,whence=0)

#seek主要是在文件中移动指针,从whence(0表示文件头,1表示当前位置,2表示文件尾)偏移offset个字节

====123.txt===

123456789

1)从头读3个字符

f=open('123.txt')

f.seek(0,0)

print f.read(3)

f.close()

>>123

2)从尾读3个字符

f=open('123.txt')

f.seek(-3,2)#2表示从文件指针指向尾巴,-3表示向前移动3个字节

print f.read(3)#读3个字节

f.close()

>>789

(8)tell()#返回文件操作标记的当前位置,以文件的开头为原点 ;
(9)裁剪文件truncate([size])
        用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则从当前位置起截断;截断之后 size 后面的所有字符被删除。
        f1.truncate()#清空文件
4,文件的读写
(1)read([size]) #size:读取的长度,以byte为单位。如果不指定参数,表示一次性读取全部内容,以字符串形式返回,并且每一行结尾会有一个"\n"符号
(2)readline([size]) #调一次读取一行,如果给定了size,有可能返回的只是一行的一部分,以字符串的形式返回,并且结尾会有一个换行符"\n"。读完一行,文件操作标记移动到下一行的开头。返回的是字符串
(3)readlines([size]) 
###读取文件的全部内容,这个函数的内部是通过循环调用readline()来实现的,返回的是列表格式,每一行是列表的一个元素,并且结尾会有一个换行符"\n"
(4)write(str) #把str写到文件中,write()并不会在str后加上一个换行符 ,只能写字符串
(5)writeline()#每次只写入一行
(5)writelines(seq) 
seq:把seq(序列)的内容全部写到文件中(多行一次性写入)。也不会自动加入换行符。
注意:writelines()方法是针对列表的操作。它接收一个字符串列表作为参数,也就是seq是一个列表