LINUX.ORG.RU

История изменений

Исправление beck, (текущая версия) :

Все просто - вы просто не умеете им пользоваться.

Не поленился и напейсал простейший тест. Итак, имеется два текстовых файла, каждый примерно по 90 МВ, с длиной строки под 900 байт и количеством строк порядка 100 тысяч.

В каждой строке с 3 по 14 позицию есть некий код (AAAABBCCXXX), который нужно достать и сравнить различия между файлами (впрочем до этого на питоне дело не дошло – стало лень), на perl я это сравнение когда-то давно делал, поэтому в коде собирается массив, не стал переделывать.

Остановился я на достать из двух файлов этот код и построчно выгрузить в третий файл, тривиальнейшая задача, да и данных, прямо скажем, не гигабайты.

file_in_1 = open(sys.argv[1], 'rt')
file_in_2 = open(sys.argv[2], 'rt')
file_out = open(sys.argv[3], 'wt')
text_1 = file_in_1.read().split('\n')
text_2 = file_in_2.read().split('\n')
for temp in text_1:
	file_out.write(temp[3:14] + '\n')
for temp in text_2:
	file_out.write(temp[3:14] + '\n')

вывод:

2020-03-12 19:18:03.775619

2020-03-12 19:18:05.362468

время работы 1,59 секунд

open(FP_01, "<$ARGV[0]") || die "Can not open $ARGV[0] file";
open(FP_02, "<$ARGV[1]") || die "Can not open $ARGV[1] file";
open(FP_RES, ">$ARGV[2]") || die "Can not open $ARGV[2] file";

my @input1 = <FP_01>;
my @input2 = <FP_02>;

my @bic1;
my @bic2;
my $i1;
my $i2;
$i1 = 0;

my $time1 = gettimeofday;
print $time1, "\n";

foreach (@input1)
{
	$bic1[$i1] = substr($_, 3, 11);
	print FP_RES $bic1[$i1] . "\n";
	$i1++;
}
$i2 = 0;
foreach (@input2)
{
	$bic2[$i2] = substr($_, 3, 11);
	print FP_RES $bic2[$i2] . "\n";
	$i2++;
}
my $time2 = gettimeofday;
print $time2, "\n";

вывод:

1584030638.01605

1584030638.11776

время работы 0,1 секунды

Разница – в почти 16 раз. При масштабировании будет ещё хуже. Наверное у питона есть достоинства, но для моих элементарных задач питон - тормозное убожество.

PS Только обратил внимание: perl пишет в файл «как есть», а питон добавляет к концу CRLF, ну да, он же текстовый. А если открыть файл на запись как ‘wb’, то питон немедля начинает ругаться на то, что строку так в файл писать нельзя, надо byte-object. В perl всей этой головной боли нет, он просто пишет ровно те данные, что я ему указал.

Исправление beck, :

Все просто - вы просто не умеете им пользоваться.

Не поленился и напейсал простейший тест. Итак, имеется два текстовых файла, каждый примерно по 90 МВ, с длиной строки под 900 байт и количеством строк порядка 100 тысяч.

В каждой строке с 3 по 14 позицию есть некий код (AAAABBCCXXX), который нужно достать и сравнить различия между файлами (впрочем до этого на питоне дело не дошло – стало лень), на perl я это сравнение когда-то давно делал, поэтому в коде собирается массив, не стал переделывать.

Остановился я на достать из двух файлов этот код и построчно выгрузить в третий файл, тривиальнейшая задача, да и данных, прямо скажем, не гигабайты.

file_in_1 = open(sys.argv[1], 'rt')
file_in_2 = open(sys.argv[2], 'rt')
file_out = open(sys.argv[3], 'wt')
text_1 = file_in_1.read().split('\n')
text_2 = file_in_2.read().split('\n')
for temp in text_1:
	file_out.write(temp[3:14] + '\n')
for temp in text_2:
	file_out.write(temp[3:14] + '\n')

вывод:

2020-03-12 19:18:03.775619

2020-03-12 19:18:05.362468

время работы 1,59 секунд

open(FP_01, "<$ARGV[0]") || die "Can not open $ARGV[0] file";
open(FP_02, "<$ARGV[1]") || die "Can not open $ARGV[1] file";
open(FP_RES, ">$ARGV[2]") || die "Can not open $ARGV[2] file";

my @input1 = <FP_01>;
my @input2 = <FP_02>;

my @bic1;
my @bic2;
my $i1;
my $i2;
$i1 = 0;

my $time1 = gettimeofday;
print $time1, "\n";

foreach (@input1)
{
	$bic1[$i1] = substr($_, 3, 11);
	print FP_RES $bic1[$i1] . "\n";
	$i1++;
}
$i2 = 0;
foreach (@input2)
{
	$bic2[$i2] = substr($_, 3, 11);
	print FP_RES $bic2[$i2] . "\n";
	$i2++;
}
my $time2 = gettimeofday;
print $time2, "\n";

вывод:

1584030638.01605

1584030638.11776

время работы 0,1 секунды

Разница – в почти 16 раз. При масштабировании будет ещё хуже. Наверное у питона есть достоинства, но для моих элементарных задач питон - тормозное убожество.

Исправление beck, :

Все просто - вы просто не умеете им пользоваться.

Не поленился и напейсал простейший тест. Итак, имеется два текстовых файла, каждый примерно по 90 МВ, с длиной строки под 900 байт и количеством строк порядка 100 тысяч.

В каждой строке с 3 по 14 позицию есть некий код (AAAABBCCXXX), который нужно достать и сравнить различия между файлами (впрочем до этого на питоне дело не дошло – стало лень), на perl я это сравнение когда-то давно делал, поэтому в коде собирается массив, не стал переделывать.

Остановился я на достать из двух файлов этот код и построчно выгрузить в третий файл, тривиальнейшая задача, да и данных, прямо скажем, не гигабайты.

file_in_1 = open(sys.argv[1], 'rt')
file_in_2 = open(sys.argv[2], 'rt')
file_out = open(sys.argv[3], 'wt')
text_1 = file_in_1.read().split('\n')
text_2 = file_in_2.read().split('\n')
for temp in text_1:
	file_out.write(temp[3:14] + '\n')
for temp in text_2:
	file_out.write(temp[3:14] + '\n')

вывод: 2020-03-12 19:18:03.775619 2020-03-12 19:18:05.362468

время работы 1,59 секунд

open(FP_01, "<$ARGV[0]") || die "Can not open $ARGV[0] file";
open(FP_02, "<$ARGV[1]") || die "Can not open $ARGV[1] file";
open(FP_RES, ">$ARGV[2]") || die "Can not open $ARGV[2] file";

my @input1 = <FP_01>;
my @input2 = <FP_02>;

my @bic1;
my @bic2;
my $i1;
my $i2;
$i1 = 0;

my $time1 = gettimeofday;
print $time1, "\n";

foreach (@input1)
{
	$bic1[$i1] = substr($_, 3, 11);
	print FP_RES $bic1[$i1] . "\n";
	$i1++;
}
$i2 = 0;
foreach (@input2)
{
	$bic2[$i2] = substr($_, 3, 11);
	print FP_RES $bic2[$i2] . "\n";
	$i2++;
}
my $time2 = gettimeofday;
print $time2, "\n";

вывод: 1584030638.01605 1584030638.11776

время работы 0,1 секунды

Разница – в почти 16 раз. При масштабировании будет ещё хуже. Наверное у питона есть достоинства, но для моих элементарных задач питон - тормозное убожество.

Исправление beck, :

Все просто - вы просто не умеете им пользоваться.

Не поленился и напейсал простейший тест. Итак, имеется два текстовых файла, каждый примерно по 90 МВ, с длиной строки под 900 байт и количеством строк порядка 100 тысяч.

В каждой строке с 3 по 14 позицию есть некий код (AAAABBCCXXX), который нужно достать и сравнить различия между файлами (впрочем до этого на питоне дело не дошло – стало лень), на perl я это сравнение когда-то давно делал, поэтому в коде собирается массив, не стал переделывать.

Остановился я на достать из двух файлов этот код и построчно выгрузить в третий файл, тривиальнейшая задача, да и данных, прямо скажем, не гигабайты.

file_in_1 = open(sys.argv[1], 'rt')
file_in_2 = open(sys.argv[2], 'rt')
file_out = open(sys.argv[3], 'wt')
text_1 = file_in_1.read().split('\n')
text_2 = file_in_2.read().split('\n')
for temp in text_1:
	file_out.write(temp[3:14] + '\n')
for temp in text_2:
	file_out.write(temp[3:14] + '\n')

вывод: 2020-03-12 19:18:03.775619

2020-03-12 19:18:05.362468

время работы 1,59 секунд

open(FP_01, "<$ARGV[0]") || die "Can not open $ARGV[0] file";
open(FP_02, "<$ARGV[1]") || die "Can not open $ARGV[1] file";
open(FP_RES, ">$ARGV[2]") || die "Can not open $ARGV[2] file";

my @input1 = <FP_01>;
my @input2 = <FP_02>;

my @bic1;
my @bic2;
my $i1;
my $i2;
$i1 = 0;

my $time1 = gettimeofday;
print $time1, "\n";

foreach (@input1)
{
	$bic1[$i1] = substr($_, 3, 11);
	print FP_RES $bic1[$i1] . "\n";
	$i1++;
}
$i2 = 0;
foreach (@input2)
{
	$bic2[$i2] = substr($_, 3, 11);
	print FP_RES $bic2[$i2] . "\n";
	$i2++;
}
my $time2 = gettimeofday;
print $time2, "\n";

вывод: 1584030638.01605

1584030638.11776

время работы 0,1 секунды

Разница – в почти 16 раз. При масштабировании будет ещё хуже. Наверное у питона есть достоинства, но для моих элементарных задач питон - тормозное убожество.

Исправление beck, :

Все просто - вы просто не умеете им пользоваться.

Не поленился и напейсал простейший тест. Итак, имеется два текстовых файла, каждый примерно по 90 МВ, с длиной строки под 900 байт и количеством строк порядка 100 тысяч.

В каждой строке с 3 по 14 позицию есть некий код (AAAABBCCXXX), который нужно достать и сравнить различия между файлами (впрочем до этого на питоне дело не дошло – стало лень), на perl я это сравнение когда-то давно делал, поэтому в коде собирается массив, не стал переделывать.

Остановился я на достать из двух файлов этот код и построчно выгрузить в третий файл, тривиальнейшая задача, да и данных, прямо скажем, не гигабайты.

file_in_1 = open(sys.argv[1], 'rt')
file_in_2 = open(sys.argv[2], 'rt')
file_out = open(sys.argv[3], 'wt')
text_1 = file_in_1.read().split('\n')
text_2 = file_in_2.read().split('\n')
for temp in text_1:
	file_out.write(temp[3:14] + '\n')
for temp in text_2:
	file_out.write(temp[3:14] + '\n')

вывод: 2020-03-12 19:18:03.775619 2020-03-12 19:18:05.362468

время работы 1,59 секунд

open(FP_01, "<$ARGV[0]") || die "Can not open $ARGV[0] file";
open(FP_02, "<$ARGV[1]") || die "Can not open $ARGV[1] file";
open(FP_RES, ">$ARGV[2]") || die "Can not open $ARGV[2] file";

my @input1 = <FP_01>;
my @input2 = <FP_02>;

my @bic1;
my @bic2;
my $i1;
my $i2;
$i1 = 0;

my $time1 = gettimeofday;
print $time1, "\n";

foreach (@input1)
{
	$bic1[$i1] = substr($_, 3, 11);
	print FP_RES $bic1[$i1] . "\n";
	$i1++;
}
$i2 = 0;
foreach (@input2)
{
	$bic2[$i2] = substr($_, 3, 11);
	print FP_RES $bic2[$i2] . "\n";
	$i2++;
}
my $time2 = gettimeofday;
print $time2, "\n";

вывод: 1584030638.01605 1584030638.11776

время работы 0,1 секунды

Разница – в почти 16 раз. При масштабировании будет ещё хуже. Наверное у питона есть достоинства, но для моих элементарных задач питон - тормозное убожество.

Исходная версия beck, :

Все просто - вы просто не умеете им пользоваться.

Не поленился и напейсал простейший тест. Итак, имеется два текстовых файла, каждый примерно по 90 МВ, с длиной строки под 900 байт и количеством строк порядка 100 тысяч.

В каждой строке с 3 по 14 позицию есть некий код (AAAABBCCXXX), который нужно достать и сравнить различия между файлами (впрочем до этого на питоне дело не дошло – стало лень), на perl я это сравнение когда-то давно делал, поэтому в коде собирается массив, не стал переделывать.

Остановился я на достать из двух файлов этот код и построчно выгрузить в третий файл, тривиальнейшая задача, да и данных, прямо скажем, не гигабайты.

file_in_1 = open(sys.argv[1], 'rt')
file_in_2 = open(sys.argv[2], 'rt')
file_out = open(sys.argv[3], 'wt')

text_1 = file_in_1.read().split('\n')
text_2 = file_in_2.read().split('\n')

rec_1 = ""
for temp in text_1:
	file_out.write(temp[3:14] + '\n')

#bics_1 = rec_1.split('\n')

rec_2 = ""
for temp in text_2:
	file_out.write(temp[3:14] + '\n')

вывод: 2020-03-12 19:18:03.775619 2020-03-12 19:18:05.362468

время работы 1,59 секунд

open(FP_01, "<$ARGV[0]") || die "Can not open $ARGV[0] file";
open(FP_02, "<$ARGV[1]") || die "Can not open $ARGV[1] file";
open(FP_RES, ">$ARGV[2]") || die "Can not open $ARGV[2] file";

my @input1 = <FP_01>;
my @input2 = <FP_02>;

my @bic1;
my @bic2;
my $i1;
my $i2;
$i1 = 0;

my $time1 = gettimeofday;
print $time1, "\n";

foreach (@input1)
{
	$bic1[$i1] = substr($_, 3, 11);
	print FP_RES $bic1[$i1] . "\n";
	$i1++;
}
$i2 = 0;
foreach (@input2)
{
	$bic2[$i2] = substr($_, 3, 11);
	print FP_RES $bic2[$i2] . "\n";
	$i2++;
}
my $time2 = gettimeofday;
print $time2, "\n";

вывод: 1584030638.01605 1584030638.11776

время работы 0,1 секунды

Разница – в почти 16 раз. При масштабировании будет ещё хуже. Наверное у питона есть достоинства, но для моих элементарных задач питон - тормозное убожество.