文件操作之打开文件
一、打开文件
obj=open('文件路径','打开文件方式')打开文件方式有:r:只读方式r+:相当于rww:写入方式w+:仍然等于w,无意义a:追加方式a+:仍然等于a,无意义open()是Python的内建函数,提供了初始化输入/输出(I/O)的操作通用接口,成功打开一个文件后返回一个对象,否则发生IOError异常,file()是一个工厂函数,与open方法一样,可以互换,但是一般推荐用open(),因为open()是Python内建函数。file后期会被合并掉其他函数内
引入两个方法:
obj.tell()tell返回读取文件之前或者之后读/写指针的当前位置。(换句话说就是告诉你指针的位置)obj.seek()在偏移设定该文件的当前位置。参数是可选的0表示移动到一个绝对位置(从文件开始算起),1表示移到一个相对位置(从当前位置算起)
示例代码如下:
obj=open('log.py','r')obj.seek(5)---------->打开文件后将指针定位到第5个字节位置,便于下一个操作printobj.tell()------->打印指针的位置.(从5个字节位置开始读)printobj.read()------->打印读取文件到最后printobj.tell()------->打印指针对位置obj.close()--------->关闭文件
log.py内容如下:
11111111222222输出结果:511122222216以为r+形式打开文件示例代码如下:__author__='ryan'obj=open('log.py','r+')printobj.tell()obj.write('##########')obj.close()
log.py内容如下
1
111111122222222执行上述代码,查看log.py内容##########2222222说明以r+模式打开,写入内容时,如果直接从位置在文件开头(即0位置)那么就会从0位置开始覆盖以前的内容,写入内容有多少就覆盖掉多少;
再看下面代码,将指针位置移动到第8个字节的位置,然后再执行写入*
__author__='ryan'obj=open('log.py','r+')printobj.seek(8)printobj.tell()obj.write('*************')obj.close()
查看log.py结果
########*************
从第8个位置开始写入星号(*)
接着再看下一段代码:(在上述代码中加入truncate())方法,同时将指针恢复到文件开始位置(即0位置)
__author__ = 'ryan'
obj=open('log.py','r+')printobj.tell()obj.write('@@@@@@')obj.truncate()obj.close()
再观察log.py内容如下:
@@@@@@
发现5个@符号之后的内容全部没有了,接截取了5个@符号之后的所有内容
再接着看下面代码:
obj=open('log.py','rb')printobj.tell()obj.write('@@@@@@')obj.truncate()obj.close()
其中'rb'是以二进制的方式读取文件,如果跨平台即要加上b,因为linux上文件都是以二进制进行存放的。而在windows上则需要加上b
小结:
操作文件时,一般需要经历如下步骤:
打开文件
操作文件
一、打开文件
1
文件句柄 = file('文件路径', '模式')
注:python中打开文件有两种方式,即:open(...) 和 file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open。
打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。
打开文件的模式有:
r,只读模式(默认)。
w,只写模式。【不可读;不存在则创建;存在则删除内容;】
a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
r+,可读写文件。【可读;可写;可追加】
w+,写读
a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
rU
r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
rb
wb
ab
二、操作文件
classfile(object):defclose(self):#realsignatureunknown;restoredfrom__doc__关闭文件"""close()->Noneor(perhaps)aninteger.Closethefile.Setsdataattribute.closedtoTrue.AclosedfilecannotbeusedforfurtherI/Ooperations.close()maybecalledmorethanoncewithouterror.Somekindsoffileobjects(forexample,openedbypopen())mayreturnanexitstatusuponclosing."""deffileno(self):#realsignatureunknown;restoredfrom__doc__文件描述符"""fileno()->integer"filedescriptor".Thisisneededforlower-levelfileinterfaces,suchos.read()."""return0defflush(self):#realsignatureunknown;restoredfrom__doc__刷新文件内部缓冲区"""flush()->None.FlushtheinternalI/Obuffer."""passdefisatty(self):#realsignatureunknown;restoredfrom__doc__判断文件是否是同意tty设备"""isatty()->trueorfalse.Trueifthefileisconnectedtoattydevice."""returnFalsedefnext(self):#realsignatureunknown;restoredfrom__doc__获取下一行数据,不存在,则报错"""x.next()->thenextvalue,orraiseStopIteration"""passdefread(self,size=None):#realsignatureunknown;restoredfrom__doc__读取指定字节数据"""read([size])->readatmostsizebytes,returnedasastring.Ifthesizeargumentisnegativeoromitted,readuntilEOFisreached.Noticethatwheninnon-blockingmode,lessdatathanwhatwasrequestedmaybereturned,evenifnosizeparameterwasgiven."""passdefreadinto(self):#realsignatureunknown;restoredfrom__doc__读取到缓冲区,不要用,将被遗弃"""readinto()->Undocumented.Don'tusethis;itmaygoaway."""passdefreadline(self,size=None):#realsignatureunknown;restoredfrom__doc__仅读取一行数据"""readline([size])->nextlinefromthefile,asastring.Retainnewline.Anon-negativesizeargumentlimitsthemaximumnumberofbytestoreturn(anincompletelinemaybereturnedthen).ReturnanemptystringatEOF."""passdefreadlines(self,size=None):#realsignatureunknown;restoredfrom__doc__读取所有数据,并根据换行保存值列表"""readlines([size])->listofstrings,eachalinefromthefile.Callreadline()repeatedlyandreturnalistofthelinessoread.Theoptionalsizeargument,ifgiven,isanapproximateboundonthetotalnumberofbytesinthelinesreturned."""return[]defseek(self,offset,whence=None):#realsignatureunknown;restoredfrom__doc__指定文件中指针位置"""seek(offset[,whence])->None.Movetonewfileposition.Argumentoffsetisabytecount.Optionalargumentwhencedefaultsto0(offsetfromstartoffile,offsetshouldbe>=0);othervaluesare1(moverelativetocurrentposition,positiveornegative),and2(moverelativetoendoffile,usuallynegative,althoughmanyplatformsallowseekingbeyondtheendofafile).Ifthefileisopenedintextmode,onlyoffsetsreturnedbytell()arelegal.Useofotheroffsetscausesundefinedbehavior.Notethatnotallfileobjectsareseekable."""passdeftell(self):#realsignatureunknown;restoredfrom__doc__获取当前指针位置"""tell()->currentfileposition,aninteger(maybealonginteger)."""passdeftruncate(self,size=None):#realsignatureunknown;restoredfrom__doc__截断数据,仅保留指定之前数据"""truncate([size])->None.Truncatethefiletoatmostsizebytes.Sizedefaultstothecurrentfileposition,asreturnedbytell()."""passdefwrite(self,p_str):#realsignatureunknown;restoredfrom__doc__写内容"""write(str)->None.Writestringstrtofile.Notethatduetobuffering,flush()orclose()maybeneededbeforethefileondiskreflectsthedatawritten."""passdefwritelines(self,sequence_of_strings):#realsignatureunknown;restoredfrom__doc__将一个字符串列表写入文件"""writelines(sequence_of_strings)->None.Writethestringstothefile.Notethatnewlinesarenotadded.Thesequencecanbeanyiterableobjectproducingstrings.Thisisequivalenttocallingwrite()foreachstring."""passdefxreadlines(self):#realsignatureunknown;restoredfrom__doc__可用于逐行读取文件,非全部"""xreadlines()->returnsself.Forbackwardcompatibility.Fileobjectsnowincludetheperformanceoptimizationspreviouslyimplementedinthexreadlinesmodule."""pass
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。