1
def create_file_numbers_old(filename, size):
    start = time.clock()
    value = 0
    with open(filename, "w") as f:
        while f.tell()< size:
            f.write((str(value))+'\n')
            value += 1

    end = time.clock()
    print "time taken to write a file of size", size, " is ", (end -start), "seconds \n"

这是我需要优化的功能!有人可以帮我在大约 3-4 秒内运行它吗?

def main(argv = sys.argv):
    #add argument checking and parsing here ..

    fpath = output_path(r"est.txt")
    size=50*1024*1024      #write a 50M file
    cProfile.run("create_file_numbers_old('%s', %d)" %(fpath, size))
    fpath1 = output_path(r"est1.txt")
    cProfile.run("create_file_numbers_new('%s', %d)" %(fpath1, size))


if __name__ == "__main__":
    main()
4

1 回答 1

2

对我来说,调用.tell()会大大减慢速度。如果您跟踪在 python-space 中写入了多少,您可以将时间减少 10 倍。

def create_file_numbers_old(filename, size):
    start = time.clock()
    value = 0
    written = 0 # number of bytes written so far
    with open(filename, "w") as f:
        while written < size:
            s = str(value) + '\n'
            written += len(s) # add how many bytes are in this write() 
            f.write(s)
            value += 1

    end = time.clock()
    print "time taken to write a file of size", size, " is ", (end -start), "seconds \n"
于 2013-05-17T15:14:48.513 回答