Python手动清理内存

2020-09-13  本文已影响0人  Lewisbase

写程序这方面,自己不是科班出身,本科时唯一的C语言课也没有好好听讲。导致后来写代码的时候十分不规范,也缺失了许多细节,日常遇到的自己给自己挖的坑还是有必要记录一下,方便以后复盘。

就像现在,前脚写完的代码后脚就忘了怎么写了……

这段代码主要是处理了一下打文件读取过程中内存不够的问题,中间也对DataFrame进行了一系列操作,结果具体的操作怎么实现的自己已经不记得了……目前还没调试好。

import pandas as pd
import numpy as np
import gc
import os

feature = ['111,222,333,444',
           '111,222,333,444',
           '111,222,333,444',
           '111,222,333,444',
           '111,222,333,444',
           '111,222,333,444']
dict_in = {'111':'yiyiyi','222':'ererer','333':'sjsjsj','444':'sisisi'}
df = pd.DataFrame(feature,columns=['test'])

def batch_in(df_in,batch,dict_in,str_in='test'):
    '''分批传入,写出,处理数据,清理内存,从硬盘读取,输出'''
    if os.path.isfile('test_tmp.csv'):
        os.remove('test_tmp.csv')
    for i in range(1,df_in.shape[0]//batch):
        #Pandas扩列操作         
        df_tmp = df_in[str_in][batch*(i-1):batch*i].str.split(',',expand=True)
        for j in df_tmp.columns:
            df_tmp[j] = df_tmp[j].map(dict_in)
        df_tmp.to_csv('test_tmp.csv',mode='a',header=False,index=0)
        del df_tmp
        gc.collect()

    df_tmp = df_in[str_in][batch*(df_in.shape[0]//batch-1):].str.split(',',expand=True)
    for j in df_tmp.columns:
        df_tmp[j] = df_tmp[j].map(dict_in)
    df_tmp.to_csv('test_tmp.csv',mode='a',header=False,index=0)
    del df_tmp
    gc.collect()
    df_out = []
    with open('test_tmp.csv','r') as f:
        for line in f:
            df_out.append(line.strip())
    return df_out

df_out = batch_in(df,1,dict_in)
上一篇 下一篇

猜你喜欢

热点阅读