Python CSV到JSON:为什么JSON比CSV文件大得多,如何修复?

时间:2017-03-02 05:27:02

标签: python json csv pandas dictionary

将CSV文件转换为JSON时,我遇到了一个有趣的问题。我根据SQLite查询的输出生成一个CSV文件,并将其写入硬盘驱动器。

然后我使用Pandas将CSV文件加载到我的脚本中:

import pandas as pd

df_var  = pd.read_csv('input.csv',header=0, low_memory=False)

我使用了 low_memory 选项,因为数据框由多种数据类型组成。如果有人建议,我不反对将所有内容存储为字符串值。

数据框的每一行代表一条记录(每条记录有144个字段/列),所以我一次剥离一行并将其提供给我构建的类以将该行转换为字典(这是在类):

class CSVParser:


    def __init__(self, recordid, tjson={}):

        self.recordid = recordid
        self.json     = tjson

    def create_json(self, df):

        o_dict = {
                    'root': {
                        'id': {
                            'field1':df['field1'],
                            'field2':df['field2'],
                            'field3':self.recordid,
                        },

                        'core': {
                            'field1':df['field1'],
                            'field2':df['field2'],
                            'field3':df['field3'],
                            'field4':df['field4'],
                            'field5':df['field5'],
                            'field6':df['field6'],
                        },

                        #REMAINING RECORDS LEFT OUT FOR BREVITY

                    }
                }

        self.json.append(o_dict)

从这里我将JSON写入磁盘

def write_json(self):
    #if self is not empty write JSON to file

    if self.json:
        filename = 'output/' + self.recordid + '_output.json'
        with open(filename,'w') as outfile:
            json.dump(self.json,outfile, indent=4, separators=(',', ': '))
        print('JSON saved to drive')
    else:
        print('\nEmpty JSON\n')
        return(self.json)

这是我得到的,假设我只运行500条记录,CSV文件的大小约为23MB,结果JSON大约为190MB!当然,我正在添加一些我无法找到的无意格式。我相信JSON文件会产生比CSV更小的文件大小。

最后一点信息,我最初使用OrderedDict来运行它,但是当我看到生成的JSON文件大小时,我认为OrderedDict可能会添加一些格式,这种格式在增加大小后很多,之后又回到字典中了不多随着结束文件大小而改变。

如果您需要任何其他信息,请与我们联系。我们一定会提供。

你有什么想法?

1 个答案:

答案 0 :(得分:1)

这是因为JSON比CSV还要多得多。

如果你看一下生成的JSON,你会发现它有很多键,比如field1,field2等。这是因为JSON没有架构的概念。每个条目都可以不同。这些额外的字符占用空间(每个字母1个字节)。这些可能会增加您实际数据的数据。

除此之外,JSON还包含[,],{,},和之类的字符, 这些是必不可少的,因为JSON也非常易读。

最后,如果你想在较小的空间中转储数据,你可以使用空间,但仍想使用JSON,尝试缩短密钥。比如使用f1而不是field1。

您还可以将JSON转换为列表而不是字典。 因为您可以从SQL获得该方案。