我在700MB
周围保存了一个巨大的json文件。我无法处理它。
是否有可能将其分成10个单独的文件夹,但每个文件都有一个完整的json注释,json有前半部分到一个文件而另一个到下一个文件?
答案 0 :(得分:1)
JSON文件的结构允许简单的切片:它包含几个"项目" (准确地说是7097)。这些"项目"是最高级别,包含不同数量的单个项目。
很容易将这些接缝线上的大文件撕开,有两行Perl可以这样做(Perl因为它可用于多种操作系统并且很容易处理大文件):
#!/usr/bin/perl
use strict;
my $flag = 0;
my $count = 0;
my $start = "Kickstarter_Kickstarter_";
my $ending = "_.jison";
my $filename = "";
open (FILE, '<', 'Kickstarter_Kickstarter.json')
or die "file opening failed: $!";
while (<FILE>) {
if (/"projects": \[/){
if($flag == 0){
$flag = 1;
$filename = $start.$count.$ending;
open (CHUNK, '>>', $filename)
or die "file opening failed: $!";
print STDOUT "Writing a chunk to ".$filename."\n";
$count++;
print CHUNK "{ ".$_;
next;
}
if ( $flag == 1){
close (CHUNK) or die "file closing failed: $!";
$flag = 0;
}
}
if(tell(CHUNK) != -1){
print CHUNK $_ unless /^\,{/;
}
close (FILE) or die "file closing failed: $!";
(仅适用于此特定文件!)
这将放置所有这些&#34;项目&#34;将块分块放入自己的编号文件中。你可以用它做你想做的事(例如把它们放到十个文件夹中),但我建议你使用你最熟悉的JSON解析器并索引这些文件,即:选择一个或多个条目(例如:id,name,goal,created_it等)并为每个条目创建一个文件,用于连接具有单个文件的条目。这样你只需要搜索这些小文件而不是整个堆。
我没有检查过它,但是有些条目可能会多次出现(例如:你可能会发现有几个名叫Smith的人),所以简单的元组很可能不会这样做。