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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM