gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:14:53 25 4
gpt4 key购买 nike

在将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com