python - 将巨大的(95Mb)JSON 数组拆分成更小的 block ?

标签 python json postgresql ubuntu chunks

我以 JSON 的形式从我的数据库中导出了一些数据,它本质上只是一个 [列表],里面有一堆 (900K) {objects}。

现在正在尝试将它导入我的生产服务器,但我有一些便宜的网络服务器。他们不喜欢我在 10 分钟内吃掉他们所有的资源。

如何将这个文件拆分成更小的 block ,以便我可以逐个导入它?


编辑: 实际上,它是一个 PostgreSQL 数据库。我愿意接受有关如何分 block 导出所有数据的其他建议。我在我的服务器上安装了 phpPgAdmin,它应该可以接受 CSV、Tabbed 和 XML 格式。


我必须修复 phihag 的脚本:

import json
with open('fixtures/PostalCodes.json','r') as infile:
  o = json.load(infile)
  chunkSize = 50000
  for i in xrange(0, len(o), chunkSize):
    with open('fixtures/postalcodes_' + ('%02d' % (i//chunkSize)) + '.json','w') as outfile:
      json.dump(o[i:i+chunkSize], outfile)

转储:

pg_dump -U username -t table database > filename

恢复:

psql -U username < filename

(我不知道 pg_restore 到底做了什么,但它给我错误)

这方面的教程很方便地省略了这些信息,尤其是。 -U 选项在大多数情况下可能是必需的。是的,手册页对此进行了解释,但筛选 50 个您不关心的选项总是一件痛苦的事情。


我最终接受了 Kenny 的建议……尽管这仍然是一个很大的痛苦。我不得不将表格转储到一个文件中,压缩它,上传它,提取它,然后我尝试导入它,但是生产中的数据略有不同并且缺少一些外键(邮政编码附加到城市)。当然,我不能只导入新城市,因为那样它会抛出一个重复键错误而不是默默地忽略它,这本来很好。所以我不得不清空那张 table ,对城市重复这个过程,才意识到其他东西与城市有关,所以我也不得不清空那张 table 。把城市弄回来,然后我终于可以导入我的邮政编码了。到目前为止,我已经删除了一半的数据库,因为所有内容都与所有内容相关联,我不得不重新创建所有条目。迷人的。还好我还没有启动该网站。此外,“清空”或截断表似乎不会重置我想要的序列/自动增量,因为有几个神奇的条目我想要 ID 1。所以..我必须删除或重置那些也是(我不知道怎么做),所以我手动将那些 PK 编辑回 1。

如果使用 phihag 的解决方案,我会遇到类似的问题,而且我必须一次导入 17 个文件,除非我编写另一个导入脚本来匹配导出脚本。虽然他确实从字面上回答了我的问题,但谢谢。

最佳答案

在 Python 中:

import json
with open('file.json') as infile:
  o = json.load(infile)
  chunkSize = 1000
  for i in xrange(0, len(o), chunkSize):
    with open('file_' + str(i//chunkSize) + '.json', 'w') as outfile:
      json.dump(o[i:i+chunkSize], outfile)

关于python - 将巨大的(95Mb)JSON 数组拆分成更小的 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7052947/

相关文章:

python - 使用 tensorflow 的多变量线性回归

javascript - 在项目启动时从 $http.GET 设置 Angularjs 常量

ruby-on-rails - 多个具有并属于多个关系

javascript - 单击某个项目后加载帖子详细信息页面

javascript - 将 json 数组解析为数组 javascript

ruby-on-rails - 如何使用 Rails check_box 表单助手保存 'Yes' 或 'No' 而不是 'true' 或 'false'?

sql - PostgreSQL unnest() 连续整数按数字分组

python - 如何在 Python 中将图像添加到 PDF 文件?

python - Python xpath中如何处理单引号和双引号

python - 有没有办法将 bash 脚本的输出到 "feed"到最初执行操作的 python 脚本中的变量中?