Re: [問題] 二進位檔轉ASCII檔

看板Python作者 (請多指教!!)時間12年前 (2013/01/29 23:39), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/7 (看更多)
看到你的做法 小的有點淺見... 因為小時候不懂事的時候也發生過一樣的狀況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
文章代碼(AID): #1H1-qsZs (Python)
文章代碼(AID): #1H1-qsZs (Python)