我有一個巨大的json文件保存在本地,圍繞700MB
。我無法處理它。將一個巨大的json文件分解成單獨的文件
是否有可能將其分成10個單獨的文件夾,但每個文件都有一個完整的JSON注意有一個JSON有一個文件的前一半,另一個到下一個?
我有一個巨大的json文件保存在本地,圍繞700MB
。我無法處理它。將一個巨大的json文件分解成單獨的文件
是否有可能將其分成10個單獨的文件夾,但每個文件都有一個完整的JSON注意有一個JSON有一個文件的前一半,另一個到下一個?
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: $!";
(只會工作,爲這個特定的文件!)
這將會把每這些「項目」塊的變成自己的,編號的文件。你可以用它來做你想做的事情(例如把它們放到十個文件夾中),但我會建議使用你最熟悉的JSON解析器併爲這些文件建立索引,即:選擇一個或多個條目(例如:id,名稱,目標,created_it等),併爲每個條目創建一個文件,以便將條目與單個文件連接起來。這樣你只需要搜索這些小文件而不是整個堆。
我還沒有檢查過,但有些條目可能有多個出現(例如:你可能會發現幾個人叫史密斯),所以簡單的元組很可能不會這樣做。
這部分有點令人困惑......「每個文件都有一個完整的json記錄,json有一個文件的前半部分,另一個文件到下一個文件」。你可以補口嗎?此外,文件的結構和你想要做的事情一旦分裂,可能會發揮怎樣的作用,或者它是否可以分裂。 – 2015-02-07 16:28:55
@DerekMcCraeNorton感謝您的評論。這裏是我嘗試脫離http://werobots.io/wp-content/uploads/2014/08/Kickstarter_Kickstarter.json_.zip的文件,如果你打開它,你必須從開始和結束刪除一些行,因爲它是清楚的JSON,如果你不刪除他們 – user3456789 2015-02-07 16:36:10
當然,我可以reword:我的意思是,JSON有一個結構,當我試圖根據線或體積來分離我的文件時,JSON例如可能有6個值並將其分開3值轉到第一個文件,其他3轉到第二個文件,這樣json就會丟失全部信息。 – user3456789 2015-02-07 16:38:35