【发布时间】:2013-08-02 09:46:46
【问题描述】:
我有超过 100 万条数据的 CSV 文件。我想使用binary::tree 来减少内存使用量。
该程序主要用于搜索前5位并创建新文件(文件名应为前5位)以存储相同的前5位数据。
我的代码运行良好,但使用了高内存。
现在我用这个代码写:
my $file = "my_csv_file.csv";
open (my $data, '<', $file) or die "Could not open '$file' $!\n";
while (my $lines = <$data>) {
my @fields = split "," , $lines unless $. == 1;
my $first_five = substr ($fields[1], 0, 5,);
if (-e "$first_five.csv" ) {
open my $fh, '>>', "$first_five.csv" or die $!;
print { $fh } $lines;
} else {
open my $fh, '>>', "$first_five.csv" or die $!;
print $fh "Title\n";
}
close $fh;
}
close $data;
【问题讨论】:
-
我在这里看不到任何问题...
-
@Vince: 如何使用 binary::search 来缩短同一个程序的数据?
-
我根本看不出它是如何使用大量实际内存的,因为它不会保留任何输入数据。它读取一行,将其写入文件然后忘记它。也许你通过为每一行获取一个新变量,并执行所有这些打开和关闭操作,来锻炼 Perl 的垃圾收集器。
-
@JoeZ:实际上我的文件中有超过 100 万行的大量数据。所以这个程序花费了太多时间,CPU 使用率也很高。任何其他解决方案..
-
我当然可以看到它占用了大量的 CPU 时间,但并没有太多的内存。真正的问题是所有文件的打开/关闭。您正在打开/关闭 1,000,000 个文件。你可能最好把这个批处理。我将编写一个示例解决方案。
标签: perl csv binary-tree