python disk i/o speed
Bengt Richter
bokr at oz.net
Fri Aug 9 18:42:14 EDT 2002
On 9 Aug 2002 14:45:01 -0400, "Karl Vogel" <vogelke at dnaco.net> wrote:
[...]
>##############bench3.py: better python implementation
>
>import sys,xreadlines
>if len(sys.argv)<3:
> sys.exit("bench input output")
>
>input=open(sys.argv[1])
>output=open(sys.argv[2],"w")
>
>for line in input.xreadlines():
> part=line.split("\",\"")
> part0=part[0][1:]
> part1=part[1]
> part2=part[2][:-2]
Why not instead
part1, part2, part3 = line[1:-2].split('","'))
or
part1, part2, part3 = map(int,line[1:-2].split('","'))) # or give map & int local names first
or maybe even don't bother with part* ( and using local names for map, int, int.__add__ & reduce )
sum = reduce(int.__add__,map(int,line[1:-2].split('","'))))
>
> # formatting
> out = '"%s","%s","%s","%s"\n' % (part0, part1, part2,
> int(part0)+int(part1)+int(part2),)
and then don't bother re-creating the original line, since you are just appending ', "<sum>"'
out = '%s, "%s"\n' % (line[:-1], sum)
and then don't bother with 'out'
output.write('%s, "%s"\n' % (line[:-1], sum))
and then don't bother with 'sum'
output.write('%s, "%s"\n' % (line[:-1],
reduce(int.__add__,map(int,line[1:-2].split('","'))))))
>
> output.write(out)
>
I wonder what this would do. Don't forget to assign local names outside the loop and use
them inside the loop. I.e., recapping (untested(!))
import sys,xreadlines
if len(sys.argv)<3:
sys.exit("bench input output")
input=open(sys.argv[1])
output=open(sys.argv[2],"w")
l_int = int
l_add = int.__add__
l_map = map
l_reduce = reduce
l_outwrite = output.write
for line in input.xreadlines():
l_outwrite('%s, "%s"\n' % (
line[:-1], # chop \n
l_reduce(l_add, l_map(l_int, line[1:-2].split('","')))))
)
Hm, slicing the line twice should be unnecessary overhead:
for line in input.xreadlines():
line12 = line[1:-2]
l_outwrite('"%s", "%s"\n' % (
line12,
l_reduce(l_add, l_map(l_int, line12.split('","')))))
)
Regards,
Bengt Richter
More information about the Python-list
mailing list