Python CSV 到 JSON : Why is JSON significantly larger than the CSV file and how can it be fixed?

标签 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 可能添加了一些格式,在移回字典之后,这些格式增加了很多大小随着最终文件大小的变化而变化。

如果您需要任何其他信息,请告诉我,我一定会提供。

你有什么想法?

最佳答案

原因很简单,JSON 比 CSV 拥有更多内容。

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

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

最后,如果您想在更少的空间中转储数据,但仍想使用 JSON,请尝试缩短键。就像使用 f1 而不是 field1。

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

关于Python CSV 到 JSON : Why is JSON significantly larger than the CSV file and how can it be fixed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42547488/

相关文章:

python - 从 for 循环中的列表访问生成器对象时的意外行为

python - 如何在 Python 中使用 MLE 估计高斯分布参数

javascript - 将数据加载为 .js 文件与加载为 JSON

javascript - 从 JSON 表创建可点击的搜索结果

Python 分块 CSV 文件多处理

python - 值错误 : malformed sha256_crypt hash (checksum must be exactly 43 chars)

python - Virtualenvwrapper.sh 函数在 bash shell 中不可用

c# - JsonSerializer 不包含 Parse 的定义

python - 如何使用 pyodbc 加速批量插入 MS SQL Server

python - 使用 Pandas 读取csv文件时如何选择多行?