Python用于创建csv和内存Usag

2024-03-28 21:18:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面这将只是解析包含json对象的文本文件,然后转换成一个数据帧,然后保存到磁盘作为csv。我试图弄清楚这是否是最节省内存的方法,以及是什么逐渐耗尽了我的内存,因为它运行在大约200个不同的文件上,每个文件被保存为1-10M行。我注意到,当它完成的时候,我的内存消耗了超过50GB。更具体地说,如果我不想做任何分析,只想将数据转换成csv,那么使用Pandas和Dataframes是最佳选择吗?是否有一种不同的实现不会降低我的内存?你知道吗

def readfiles(pattern, sourcefile):
    #iterate through all zip files in datadir and yield trigger data
    try:
        with zipfile.ZipFile(sourcefile, 'r') as myzip:
            for logfile in myzip.namelist():
                for line in myzip.open(logfile):
                    try:
                        line = ujson.loads(line.rstrip('\n').rstrip(','))
                        if pattern in line:
                            for i in line['key1']:
                                yield i, line['key2']['key3'],\
                            line['key4']['key5'],line['key6'],\
                            line['key7']['key8'],line['key9']['key10']
                    except ValueError as err:
                        pass
    except zipfile.error, e:
        pass

def convertdfcsv(lines, filename):
    """Consumer for readfiles function that saves dataframe as csv."""

    df = pd.DataFrame.from_records(lines)
    #return df
    df.to_csv(os.path.join(triggertempdir, filename), index=False, header=None)
    print("Completed Processing {}".format(filename))

def main(pattern, min_date, max_date):
    """Main function to initiate pipeline"""
    sourcezipfiles = retrieve_from_s3(date)
    lines = readfiles(pattern, i)
    csvout = '{}.csv'.format(i[:-4])
    convertdfcsv(lines, csvout)

Tags: csv数据内存indffordatedef
1条回答
网友
1楼 · 发布于 2024-03-28 21:18:02

我只想使用命令行工具,如jq,或json2csv,但我还不理解您的解析。你知道吗

下面是一个将提取key1和key2并以逗号分隔的形式输出的示例: jq-r'[.key1,.key2]|@csv'

相关问题 更多 >