【发布时间】:2014-01-20 01:39:33
【问题描述】:
我有 1000 多个类似的 JSON 文件
{
"name": "Some name",
"part_num": "123456",
"other_config": {
// Large amount of objects
},
"some more": {
// Large amount of objects
}
// etc
}
当我的程序启动时,它必须扫描包含所有这些 JSON 文件的目录,加载每个文件,然后提取 "name" 和 "part_num" 值并使用这些值填充列表视图。然后用户选择一个,然后重新解析该配置并采取适当的操作。
问题是读取很多文件需要一段时间。我通过使用multiprocessing 将工作放在后台的所有可用内核上,然后在完成后填充列表视图来稍微减轻它,但我仍然受到 IO 的限制。因为我知道这段代码会在处理器和硬盘比我慢的计算机上运行,所以这个速度是不可接受的。
平均情况是我需要的值位于文件的开头,但我不能假设在最坏的情况下。 有没有办法迭代解析 JSON 文件,以便我可以更快地从这些文件中加载我需要的内容?
我可以求助于正则表达式,but I'd really prefer not to。
【问题讨论】:
-
或者你可以将它们合并成一个单一的 jsons 结构,例如一个数据数组,
[{stuff from file1},{stuff from file2},....],所以你只加载一个文件并解析一个 js 结构......或者只使用一个数据库 -
不使用 JSON 文件?例如,为什么不对这些数据使用
sqlite数据库?如果需要,只需扫描文件一次。 -
我建议寻找解决方案,而不是在每次程序启动时解析所有这些文件。也许将结果缓存在数据库中,然后只打开自上次启动以来添加或更改的文件?
-
来这里说的。构建单个数据库或文件(好像文件本身不能成为数据库),然后使用这个。当然只把搜索相关的信息放在这样一个文件里(
name和part_num) -
@MarcB 要求说不。每个文件代表一个不同的产品,我们希望将这些产品彼此分开。非程序员可能不得不编辑这些文件,如果他们不小心编辑了文件的错误部分,那将是一场灾难。