作者Schottky (顺风相送)
看板Python
标题Re: [问题] 如何优化回圈的写法
时间Mon Mar 1 18:01:50 2021
※ 引述《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), 来自: 111.250.54.51 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1614592913.A.57B.html
※ 编辑: Schottky (111.250.54.51 台湾), 03/01/2021 18:12:28
1F:推 xji4y3ru: 原来可以这样!感谢感谢~ 03/01 21:55