作者LP9527 ()
看板Python
标题Re: [问题] 如何优化回圈的写法
时间Mon Mar 1 19:27:54 2021
参考一下
时间
3.5388457775115967
0.2786409854888916
0.00041604042053222656
0.00026702880859375
with open('138300.jpg', 'rb') as r, open("t3.txt", "wb") as w:
w.write(r.read()[::-1])
※ 引述《Schottky (顺风相送)》之铭言:
: ※ 引述《xji4y3ru (千眼万雨)》之铭言:
: : 我写了一个把档案的位元顺序颠倒之後再生成新档案的程式,用的主要是list跟while,
: : 程式码如下:
: : -------------------------------------------
: : 档案大小在100kb左右速度都还可以在数秒中完成,但是200kb就要十几秒,500kb大约就
: : 要1分钟。请问是不是因为这个写法太笨了,浪费太多时间?有什麽可以优化的作法吗?
: 其实我觉得问题不是出在回圈,而是 list 变大之後操作起来太缓慢
: 我写了一个不用 list 的版本
: 先用 seek 和 tell 得知档案大小以後,直接从档案尾写到档案头
: 照理说回圈从两个变一个,速度顶多是两倍快,但快了大概几十倍
: #!/usr/bin/env python3
: #
: # Invert a file
: #
: import os
: fin = open("pi-py.txt", "rb")
: fout = open("output.txt", "wb")
: fin.seek(0, 2) # Goto end
: in_size = fin.tell()
: fin.seek(0, 0) # Goto start
: n = in_size-1
: while (n>=0):
: ch = fin.read(1)
: fout.seek(n, 0)
: fout.write(ch)
: n-=1
: fin.close()
: fout.close()
: ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
: 後来又想到可以不用回圈直接反转字串的方法,速度更快
: #!/usr/bin/env python38
: #
: # Invert a file
: #
: fin = open("pi-py.txt", "rb")
: fout = open("output.txt", "wb")
: fstr = fin.read()
: fstr = fstr[::-1]
: fout.write(fstr)
: fin.close()
: fout.close()
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.232.65.15 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1614598078.A.943.html
※ 编辑: LP9527 (118.232.65.15 台湾), 03/01/2021 20:08:04
1F:→ xji4y3ru: 感谢~ 03/01 21:55