作者CMJ0121 (请多指教!!)
看板Python
标题Re: [问题] 二进位档转ASCII档
时间Tue Jan 29 23:39:31 2013
看到你的做法 小的有点浅见...
因为小时候不懂事的时候也发生过一样的状况XXXXD
如果没有memory的问题(例如你一次读个几G几T的档案)
那建议一次全部读完 处理完再写入到档案当中
原则上... IO的速度远低於Compute的速度
Eg. (以下是pseudocode)
def fun1():
while 1:
ret = get file data with offset
ret = hex of ret
open('txt', 'a').write(ret)
def fun2():
data = open(filename)
ret = []
for block in data:
ret += [hex of block]
open('txt', 'w').write(''.join(ret))
fun1做的IO次数远多於fun2 那速度就会低落很多
除非... 你要读的data比你真实的记忆体还大
会动到swap的部分 不然fun2的效率其实很高
※ 引述《tgrk (tgrk)》之铭言:
: 实作把二进位档变成ASCII文字档的程式,类似BASE64转换。
: 构想是每次读取二进位档1byte,
: 然後转成相对应的十六进位数字,存入文字档中。
: 如下,档案会变成两倍大。
: 二进位档 文字档
: 1111 1110 1111 1110 --> FE FE
: 现在问题是这个程式很慢,1MB档案就要跑约十分钟。
: 我知道1byte就来一个回圈,数目太多了。
: 但这是程式写法不好的问题?
: 还是PYTHON 只能那麽慢?
: while 1:
: values = array.array('B') # array of integer
: p=values.read(orinobj, 1) # orinobj is a binary file
: if p:
: break
: else:
: int_value = values[0]
: if len(hex(int_value)) ==3:
: hex_value ='0'+hex(int_value)[2:3]
: else:
: hex_value =hex(int_value)[2:4]
: txtgobj=open(txt, 'a')
: txtgobj.write(hex_value)
: txtgobj.close()
: orinobj.close()
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.249.132.228
1F:推 tgrk:照着修改後就正常了 01/30 20:17
2F:→ tgrk:感谢指正,不然我会写出更多奇怪的程式。 01/30 20:19