码迷,mamicode.com
首页 > 其他好文 > 详细

文件操作之增删改查2以及文件打开的其他一些模式

时间:2017-08-19 20:04:36      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:是你   程序   png   回文   创建   stdout   logs   共存   其他   

read()会让你读取的光标变成最后。

tell()把你现在文件的句柄的指针打印出来。文件的开头指针位置是0

技术分享

技术分享

技术分享

72的意思代表字符的个数。下面的例子,只读取5个字符串个数:

技术分享

如果你想把光标移回去,移动到首位f.seek(0)

技术分享

f.detach()在文件还没关闭之前,把文件编码从GBK改成UTF-8

f.encoding() 打印打开文件的编码:之前文件是用UTF-8打开的,所以这里显示UTF-8,注意并不是文件文件的存储编码是啥。

技术分享

f.fileno()返回文件的编号,windows有一个专门的接口,内部编号

技术分享

f.name()打印文件名字

f.isatty()是否是一个打印机,tty,是否是终端设备

f.seekable()不是所有的文件都可以移动指针,这里是一个判断是否支持指针移动,比如是一个打印机文件,那么是不允许移动指针的。

f.readable()判断文件是否可读。

f.writeable()判断文件是否可写

f.flush()对文件进行刷新,强制将内存写入文件。

对文件写完一行,这个时候突然断电,可能这行没有写入文件,因为这行可能还在缓存中,因为每write一下,都写入文件,因为硬盘写入速度很慢,这个时候程序会很卡,所以会先写入到内存。

通过系统的这个特性,可以打印一个进度条程序出来。

导入模块sys,sys.stdout为标准输出,屏幕就是你的标准输出

sys.stdout.write()就是标准输出到你当前的屏幕

sys.stdout.flush()把内存立即显示到您当前的屏幕

再导入一个时间模块,time,time.sleep(0.1)等待0.1秒

技术分享

f.close关闭文件

f.closed判断文件是否关闭,返回True,Flase

f.truncate()如果什么都不写会清空文件,如果写入数字10,表示截断前10个字符

技术分享

技术分享

技术分享

 如果你想先移动指针,再截断20,是不可行的,f.truncate(20)依旧是从头截断,到20个字符,并不是截图从10-30的字符

 下面的这个方法,达不到你想要的效果!

技术分享

对文件即能读也能写的读写模式:r+

但是注意这种模式其实读和追加模式共存的情况,读的确是从第一行读取的,但是你写入文件的时候,其实是写入到文件最末行

技术分享

技术分享

但是对文件的写入是写入到了文件的最后一行:

技术分享

对文件的写读模式:w+

写读模式的特点,是先用写的方法打开文件,也就是创建一个新的文件,然后再对文件进行写或者读。但是请注意,读可以用seek()的方法移动到任意位置进行读,但是写依旧是写入到了文件的最后一行!!!

技术分享

技术分享

技术分享

 技术分享

为什么对文件的写总是在最后一行呢,在python3.0版本因为如果你在中间写入数据的话,会把中间的数据进行覆盖,并不是写入以后,当前位置的数据就往后移,如果覆盖会问题更大。所以就默认写入是最后一行。

但是在python2.7,的确可以中间写入,但是会覆盖原来的数据,老师建议不要用这种方法,问题很多,很难处理。

写读模式在实际应用的场景很少,但是读写模式应用还是很方便的,可以打开文件并追加写入。

所以主要用的三种模式r,w,r+,rb,wb,ab,其他模式可以忽略,没什么应用场景

文件打开的模式还有几种情况:

追加读写模式:a+,可以在文件后头写,但是也是可以读了(不用管这种模式)

二进制文件读模式:rb,这个时候打开文件的时候,后面的参数ecoding就不用后面跟编码了。如下图:发现也可以打开文本文件,只不过readline的时候前面有字符b,以及后面跟了\r\n字符

技术分享

那么在什么情况下会用rb模式打开文件呢?

需要进行网络传输的时候,socket和client,ftp传输,在python3里必须用二进制格式进行传输

二进制文件写模式:wb,注意写入的时候要把字符串编码为二进制,其中encode("utf-8"),这里最好加下原来字符串是啥编码

技术分享

 

二进制的追加模式:ab

 

打开文件的模式有:

  • 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

文件操作之增删改查2以及文件打开的其他一些模式

标签:是你   程序   png   回文   创建   stdout   logs   共存   其他   

原文地址:http://www.cnblogs.com/itfat/p/7397369.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!