How to write fast into a file in python?
Dan Stromberg
drsalists at gmail.com
Sat May 18 15:38:30 EDT 2013
With CPython 2.7.3:
./t
time taken to write a file of size 52428800 is 15.86 seconds
time taken to write a file of size 52428800 is 7.91 seconds
time taken to write a file of size 52428800 is 9.64 seconds
With pypy-1.9:
./t
time taken to write a file of size 52428800 is 3.708232 seconds
time taken to write a file of size 52428800 is 4.868304 seconds
time taken to write a file of size 52428800 is 1.93612 seconds
Here's the code:
#!/usr/local/pypy-1.9/bin/pypy
#!/usr/bin/python
import sys
import time
import StringIO
sys.path.insert(0, '/usr/local/lib')
import bufsock
def create_file_numbers_old(filename, size):
start = time.clock()
value = 0
with open(filename, "w") as f:
while f.tell() < size:
f.write("{0}\n".format(value))
value += 1
end = time.clock()
print "time taken to write a file of size", size, " is ", (end -start),
"seconds \n"
def create_file_numbers_bufsock(filename, intended_size):
start = time.clock()
value = 0
with open(filename, "w") as f:
bs = bufsock.bufsock(f)
actual_size = 0
while actual_size < intended_size:
string = "{0}\n".format(value)
actual_size += len(string) + 1
bs.write(string)
value += 1
bs.flush()
end = time.clock()
print "time taken to write a file of size", intended_size, " is ", (end
-start), "seconds \n"
def create_file_numbers_file_like(filename, intended_size):
start = time.clock()
value = 0
with open(filename, "w") as f:
file_like = StringIO.StringIO()
actual_size = 0
while actual_size < intended_size:
string = "{0}\n".format(value)
actual_size += len(string) + 1
file_like.write(string)
value += 1
file_like.seek(0)
f.write(file_like.read())
end = time.clock()
print "time taken to write a file of size", intended_size, " is ", (end
-start), "seconds \n"
create_file_numbers_old('output.txt', 50 * 2**20)
create_file_numbers_bufsock('output2.txt', 50 * 2**20)
create_file_numbers_file_like('output3.txt', 50 * 2**20)
On Thu, May 16, 2013 at 9:35 PM, <lokeshkoppaka at gmail.com> wrote:
> On Friday, May 17, 2013 8:50:26 AM UTC+5:30, lokesh... at gmail.com wrote:
> > I need to write numbers into a file upto 50mb and it should be fast
> >
> > can any one help me how to do that?
> >
> > i had written the following code..
> >
> >
> -----------------------------------------------------------------------------------------------------------
> >
> > def create_file_numbers_old(filename, size):
> >
> > start = time.clock()
> >
> >
> >
> > value = 0
> >
> > with open(filename, "w") as f:
> >
> > while f.tell()< size:
> >
> > f.write("{0}\n".format(value))
> >
> > value += 1
> >
> >
> >
> > end = time.clock()
> >
> >
> >
> > print "time taken to write a file of size", size, " is ", (end -start),
> "seconds \n"
> >
> >
> ------------------------------------------------------------------------------------------------------------------
> >
> > it takes about 20sec i need 5 to 10 times less than that.
> size = 50mb
> --
> http://mail.python.org/mailman/listinfo/python-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20130518/c82463c7/attachment.html>
More information about the Python-list
mailing list