#csv #perl
Вопрос:
У меня есть 10 CSV-файлов @files
. Теперь я хочу подсчитать количество строк в каждом CSV-файле. Я попробовал приведенный ниже код, но он возвращает мне только количество CSV.
my $directory = 'C:folder';
open "dir", $directory or die;
@files = readdir "dir";
close("dir");
Пожалуйста, помогите мне реализовать описанный выше сценарий.
Комментарии:
1. Если вы в Unix/Linux, то вы могли бы просто использовать
wc -l file1 file2 file3 ... filen
.2. В некоторых случаях вы не можете просто считать строки, потому что поля в кавычках могут содержать новые строки.
Ответ №1:
Это может вам помочь:
#!/usr/bin/perl
use strict; use warnings;
my $directory = "/path/to/the/directory/";
my @files = glob("$directory*.csv");
foreach my $file (@files){
my $lines = 0;
open (FILE, $file) or die "Can't open '$file': $!";
$lines while (<FILE>);
close FILE;
print "File:$file = $linesn";
}
Протестировал его в Ubuntu 20.04 (Perl v5.30.0).
Комментарии:
1. Почему бы не использовать
my @lines = <FILE>; say scalar @lines
? Или вы ожидаете огромных файлов?2. @PolarBear: Да, это тоже возможно.
Ответ №2:
Это часто задаваемые вопросы.
Как подсчитать количество строк в файле?
В ответе обсуждается ряд способов подхода к проблеме, прежде чем принимать решение:
Если вы не возражаете, команда wc обычно самая быстрая, даже с дополнительными накладными расходами на межпроцессные операции. Однако убедитесь, что у вас есть незапятнанное имя файла:
#!perl -T $ENV{PATH} = undef; my $lines; if( $filename =~ /^([0-9a-z_.] )z/ ) { $lines = `/usr/bin/wc -l $1` chomp $lines; }