zoukankan      html  css  js  c++  java
  • 4G 内存处理 10G 大小的文件

    4G 内存处理 10G 大小的文件,单机怎么做?
    
    下面的讨论基于的假定:可以单独处理一行数据,行间数据相关性为零。
    
    方法一:
    
    仅使用 Python 内置模板,逐行读取到内存。
    
    使用 yield,好处是解耦读取操作和处理操作:
    
    def python_read(filename):
        with open(filename,'r',encoding='utf-8') as f:
            while True:
                line = f.readline()
                if not line:
                    return
                yield line
    以上每次读取一行,逐行迭代,逐行处理数据
    
    if __name__ == '__main__':
        g = python_read('./data/movies.dat')
        for c in g:
            print(c)
            # process c
    方法二:
    
    方法一有缺点,逐行读入,频繁的 IO 操作拖累处理效率。是否有一次 IO ,读取多行的方法?
    
    pandas 包 read_csv 函数,参数有 38 个之多,功能非常强大。
    
    关于单机处理大文件,read_csv 的 chunksize 参数能做到,设置为 5, 意味着一次读取 5 行。
    
    def pandas_read(filename,sep=',',chunksize=5):
        reader = pd.read_csv(filename,sep,chunksize=chunksize)
        while True:
            try:
                yield reader.get_chunk()
            except StopIteration:
                print('---Done---')
                break
    使用如同方法一:
    
    if __name__ == '__main__':
        g = pandas_read('./data/movies.dat',sep="::")
        for c in g:
            print(c)
            # process c
  • 相关阅读:
    Ubuntu离线安装包制作(转载)
    CentOS yum安装和配置MySQL(转载)
    repo安装
    Ubuntu 12.04.2搭建nfs服务器
    Git的撤消操作
    Linux中记录终端(Terminal)输出到文本文件(转载)
    Linux设置服务自启动(转载)
    Linux防火墙设置(转载)
    centos update git(转载)
    git相关网页
  • 原文地址:https://www.cnblogs.com/miaoweiye/p/12612311.html
Copyright © 2011-2022 走看看