将大型csv文件拆分为perl中的多个小文件

时间:2014-04-22 11:27:40

标签: perl csv

我想使用perl将csv文件拆分为多个小的csv文件。我的csv文件包含:

16047710472 4

12899376478 3

14034211945 3

16132767680 4

17059884442 4

17808605446 3

15144433554 5

15145869428 4

12269245032 3 ... ...

我想使用line-number将此文件拆分为小文件。输出文件将是动态名称。例如,第一个输出文件名为output1.csv,第二个输出文件为output2.csv,依此类推在没有输出文件。

请给我一些建议。

1 个答案:

答案 0 :(得分:0)

use strict;
use warnings;

use Text::CSV;
my $file = 'csv_with_newline.csv';

my $size = 3;

my $file_counter = 0;
my $line_counter = 0;

my $out;

my $csv = Text::CSV_XS->new ({ binary => 1, auto_diag => 1, sep_char => ';' });
open my $in, "<:encoding(utf8)", $file or die "$file: $!";
while (my $row = $csv->getline($in)) {
    $line_counter++;
    if (not $out or $line_counter > $size) {
        if ($out) {
            close $out;
            $line_counter = 0;
        }
        $file_counter++;
        my $outfile = "output$file_counter.csv";
        open $out, ">:encoding(utf8)", $outfile or die "$outfile: $!";
    }
    $csv->print($out, $row);
    print $out "\n";
}
close $in;
close $out;

有关详细说明,请参阅文章http://perlmaven.com/split-csv-file-into-multiple-files

(免责声明:我写过这篇文章)