Форум сайта python.su
Нужно написать код, который будет максимально быстро создавать пустой (забитый нулями) файл размером несколько гигабайт. На Perl это выглядит так:
#!/usr/bin/perl -w use Fcntl; my @array; $array[$_] = chr(0x00) for (0..1023); $out_str = pack("x1024", @array); sysopen(OUTFILE, "file.tmp", O_WRONLY | O_CREAT | O_TRUNC) || die "DEBUG: $!"; for ($i = 0; $i < 1048576; $i++) { # запишем 1 Гб syswrite(OUTFILE, $out_str); } close(OUTFILE);
Офлайн
Если 1-в-1, то
import os
chunk = ‘\x00’*1024
fd = os.open('file.tmp', os.O_WRONLY|os.O_CREAT|os.O_TRUNC)
for i in xrange(1048576):
os.write(fd, chunk)
os.close(fd)
А если pythonic, то
chunk = ‘\x00’*1024
fh = open('file.tmp', ‘wb’)
for i in xrange(1048576):
fh.write(chunk)
fh.close()
Скорость одинакова ;)
$ time ./zero.pl
real 0m10.996s
user 0m0.800s
sys 0m2.870s
$ time ./zero_perlish.py
real 0m13.503s
user 0m1.570s
sys 0m3.230s
$ time ./zero_pythonic.py
real 0m11.205s
user 0m2.110s
sys 0m2.320s
Отредактировано (Сен. 24, 2007 08:53:35)
Офлайн
j2a: отлично работает, спасибо!
Офлайн