Re: [問題] 二進位檔轉ASCII檔
看到你的做法 小的有點淺見...
因為小時候不懂事的時候也發生過一樣的狀況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
推
01/30 20:17, , 1F
01/30 20:17, 1F
→
01/30 20:19, , 2F
01/30 20:19, 2F
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章