美文网首页
【2017-11-07】文件与IO(三)

【2017-11-07】文件与IO(三)

作者: 小蜗牛的成长 | 来源:发表于2017-11-07 15:01 被阅读0次

继续

  • 固件大小记录的文件迭代
    在一个固定长度记录或者数据块的集合上迭代,而不是在一个文件中一行一行的迭代。
    关键词:iter(object, sentinel)、 functools.partial()函数
    iter(object, sentinel) :创建迭代对象,每次调用这个迭代器对象的__next__()方法时,都会调用object。如果__next__的返回值等于sentinel,则抛出StopIteration异常,否则返回下一个值。
    functools.partial(): 利用闭包的特性绑定预先绑定函数及函数参数, 返回一个可调用的变量, 预绑定的函数只有真正的调用才执行
import functools
RECORD_SIZE = 2
with open('test.txt', 'rb') as f:
       records = iter(functools.partial(f.read,RECORD_SIZE), b'')
       for r in records:
              print(r)
  • 读取二进制数据到可变缓冲区中
    你想直接读取二进制数据到一个可变缓冲区中,而不需要做任何的中间复制操作。或者你想原地修改数据并将它写回到一个文件中去。
    关键词:文件对象的readinto()方法
import os.path
def read_into_buffer(filename):
    buf = bytearray(os.path.getsize(filename))
    with open(filename, 'rb') as f:
        f.readinto(buf)
    return buf

    文件对象的 readinto() 方法能被用来为预先分配内存的数组填充数据,甚至包括由 array 模块或 numpy 库创建的数组。和普通 read() 方法不同的是, readinto() 填充已存在的缓冲区而不是为新对象重新分配内存再返回它们.

  • 内存映射文件
    将文件映射至内存中,并不是直接将文件放入内存中,而是当需要访问时,访问到哪里,就加在那一部分到内存中,因此不占用内存,且拥有内存级别的访问速度
    关键词:mmap模块
    使用mmap.mmap(fileno, length[, flags[, prot[, access[, offset]]]])创建mmap 对象,使用该对象如同使用普通对象
    示例:在一个文件中查找关键字
import mmap
import contextlib

word = 'resultSportGPS'
f = open('123.txt', 'r')
with contextlib.closing(mmap.mmap(f.fileno(), 0,access=mmap.ACCESS_READ)) as m:
    #也可以通过find(str,pos)来处理
    while True:
        line = m.readline().strip().decode()
        if line.find(word)>=0:
            print ("结果:{}".format(line))
        elif m.tell()==m.size():
            break
        else:
            pass

    Python还有另一个读取操作的方法:open中的read、readline、readlines,这个方法是把文件全部载入内存,再进行操作。若内存不足直接用swap或则报错退出,内存消耗和文本大小成正比,而通过mmap模块的方法可以很好的避免了这个问题。
使用mmap模块,其大致特点如下:
    - 普通文件被映射到虚拟地址空间后,程序可以向访问普通内存一样对文件进行访问,在有些情况下可以提高IO效率。
    - 它占用物理内存空间少,可以解决内存空间不足的问题,适合处理超大文件。
    - 不同于通常的字符串对象,它是可变的,可以通过切片的方式更改,也可以定位当前文件位置m.tell()或m.seek()定位到文件的指定位置,再进行m.write(str)固定长度的修改操作。
详细使用参考:http://www.cnblogs.com/zhoujinyi/p/6062907.html

相关文章

  • 【2017-11-07】文件与IO(三)

    继续 固件大小记录的文件迭代在一个固定长度记录或者数据块的集合上迭代,而不是在一个文件中一行一行的迭代。关键词:i...

  • 2018-07-03

    Netty实践与NIO原理 一、阻塞IO与非阻塞IO Linux网络IO模型(5种) (1)阻塞IO模型 所有文件...

  • IO与流 -- 文件

    文件对象 可以将存在或不存在的文件或目录封装为对象 当创建一个文件对象后,就可以利用它来对文件或目录的属性进行操作...

  • 2019-09-28

    Java的IO处理 IO类与File类的区别 IO类关注文件内的内容。File类关注文件在磁盘上的存储。因此处理文...

  • pythoncookbook 第5章 文件与IO

    第5章 文件与IO 文件的读写 和io都要通过内存 重载系统的编码方式 5.1 读取文本 f=open('/tmp...

  • 31.Python:文件读写

    IO操作与读写文件 读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。不论哪种,一定...

  • Linux 文件IO 和 标准IO

    [TOC] Linux 文件IO 和 标准IO Linux 文件IO Linux中做文件IO最常用到的5个函数是:...

  • 软件架构设计-操作系统

    操作系统 直接IO与缓冲IO 缓冲io又称作标准I/O,大多数文件系统的默认IO操作都是缓冲IO。在linux的缓...

  • 文件与流-1

    文件与流 持久化操作:(文件里、数据库里)Java.io 文件分隔符 目录操作 文件操作

  • java io流与文件

    一、流 读写字节InputStream.read和OutpueStream.write组合流过滤器 某些流(如Fi...

网友评论

      本文标题:【2017-11-07】文件与IO(三)

      本文链接:https://www.haomeiwen.com/subject/bowdmxtx.html