2 [文件]-文件操作

1.文件操作

  def fileno(self, *args, **kwargs): # real signature unknown
        返回文件句柄在内核中的索引值,以后做IO多路复用时可以用到

    def flush(self, *args, **kwargs): # real signature unknown
        把文件从内存buffer里强制刷新到硬盘

    def readable(self, *args, **kwargs): # real signature unknown
        判断是否可读

    def readline(self, *args, **kwargs): # real signature unknown
        只读一行,遇到\r or \n为止

    def seek(self, *args, **kwargs): # real signature unknown
        把操作文件的光标移到指定位置
        *注意seek的长度是按字节算的, 字符编码存每个字符所占的字节长度不一样。
        如“路飞学城” 用gbk存是2个字节一个字,用utf-8就是3个字节,因此以gbk打开时,seek(4) 就把光标切换到了“飞”和“学”两个字中间。
        但如果是utf8,seek(4)会导致,拿到了飞这个字的一部分字节,打印的话会报错,因为处理剩下的文本时发现用utf8处理不了了,因为编码对不上了。少了一个字节

    def seekable(self, *args, **kwargs): # real signature unknown
        判断文件是否可进行seek操作

    def tell(self, *args, **kwargs): # real signature unknown
        返回当前文件操作光标位置 

    def truncate(self, *args, **kwargs): # real signature unknown
        按指定长度截断文件
        *指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。

    def writable(self, *args, **kwargs): # real signature unknown
        判断文件是否可写

   

 

2.flush:内存刷新到硬盘

 

 3.readline:读取一行

 

 

4.文件光标:tell  seek read(1)

 

 

  (1)read:字符读取

  

  

 

   (2)seek tell  字节读取

>>> f = open('file_1.bak','r+')
>>> f.tell()
0
>>> f.read(1)    #读取一个字符
''
>>> f.tell()        #光标移动2个字节
2
>>> f.seek(0)
0
>>> f.read(1)
''
>>> f.read(1)
''
>>> f.tell()
4
>>> f.seek(3)    #光标移动到第3个字节
3
>>> f.tell()
3
>>> f.read(1)   #gbk  一个字符占2个字节  #读取失败
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'gbk' codec can't decode byte 0xb5 in position 4: illegal multibyte sequence

 

 

 5.截断:truncate(3) 剩下3个字节长度

 

>>> f = open('file_1.bak','r+')
>>> f.truncate(3)                   # 剩下3个字节长度
3

   

 

posted @ 2018-02-02 14:13  venicid  阅读(195)  评论(0编辑  收藏  举报