[問題] 有關寫檔的問題

看板Python作者 (殘雲奪月)時間17年前 (2007/11/05 00:25), 編輯推噓4(4011)
留言15則, 4人參與, 最新討論串1/2 (看更多)
下面是程式碼,問題在程式碼後 def byteToInt(data): sum=0 k=0 for i in data: sum+=ord(i)*pow(2,k) k+=8 return sum def intToByte(data): string='' while data!=0: string+=chr(data%256) data/=256 return string fileName=raw_input() ftr=open(fileName,"rb") BMPData=ftr.read() ftr.close() position=[0,2,6,8,10,14,18,22,26,28,30,34,38,42,46,50,54] i=0 BMPHeader=[] while i<len(position)-1: BMPHeader.append(byteToInt(BMPData[position[i]:position[i+1]])) i+=1 space=4-((3*BMPHeader[6])%4); if space==4: space=0 i=54 j=-1 k=0 pixel=[] while i<len(BMPData): if k==0: pixel.append([]) j+=1 pixel[j].append(byteToInt(BMPData[i:i+3])) i+=3 k+=1 if k==BMPHeader[6]: k=0 i+=space ftr=open("123.bmp",'w') k=0 for i in BMPData: ftr.write(i) for i in pixel: for j in i: ftr.write(intToByte(j)) print [(intToByte(j))] k+=1 if space!=0: ftr.write('\x00'*space) print [('\x00'*space)] ftr.close() 以這個圖檔為例 http://ya790206.googlepages.com/12.bmp 他的pixel data應該是 06 12 0F 06 12 0F 00 00 06 12 0F 06 12 0F 00 00 而這程式的螢幕輸出亦為如此 可是他寫到檔案裡面的卻是 06 12 0F 06 12 0F 00 00 06 12 0F 06 12 0F 00 00 06 12 0F 06 12 0F 00 00 06 12 0F 06 12 0F 00 00 為啥他會重覆輸入?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.222.46

11/05 00:31, , 1F
11/05 00:31, 1F

11/05 02:17, , 2F
for i in BMPData:
11/05 02:17, 2F

11/05 02:17, , 3F
那行看起來有可能有問題
11/05 02:17, 3F

11/05 02:17, , 4F
btw .. 你要不要說說看想要做什麼?
11/05 02:17, 4F

11/05 02:17, , 5F
這code看起來有恐怖到
11/05 02:17, 5F

11/05 02:20, , 6F
處理二元資料請善用 struct 模組 ...
11/05 02:20, 6F

11/05 02:22, , 7F
你 BMPData 寫了一次, 後面又寫了一次吧
11/05 02:22, 7F

11/05 10:19, , 8F
這程式只是讀入BMP的HEADER和pixel data,之後再寫入別的
11/05 10:19, 8F

11/05 10:20, , 9F
檔案。還有要怎樣才不會讓自己的程式碼看起來不會恐怖?
11/05 10:20, 9F

11/05 12:26, , 10F
如果不是作業的話,拉 PIL 來用就不恐怖了 (誤
11/05 12:26, 10F

11/05 14:16, , 11F
可是用PIL就不刺激了XD(這不是作業)
11/05 14:16, 11F

11/05 14:27, , 12F
感謝Tiberius建議,我剛看了一下struct模組,的確很方便
11/05 14:27, 12F

11/05 14:43, , 13F
突然發現,我不會用struct模組...,要怎麼用才能達到我定
11/05 14:43, 13F

11/05 14:44, , 14F
義的byteToInt功能?
11/05 14:44, 14F

11/05 14:46, , 15F
我知道了,我用反了XD
11/05 14:46, 15F
文章代碼(AID): #17BVAKxS (Python)
討論串 (同標題文章)
文章代碼(AID): #17BVAKxS (Python)