Python写入文件

问题描述:

我在这里遇到了一些问题。 我正在将二进制转换为ascii,以便压缩数据。 所有似乎工作正常,但是当我将'11011011'转换为ascii并尝试将其写入文件时,我不断收到错误Python写入文件

UnicodeEncodeError:'charmap'编解码器无法在位置0编码字符'\ xdb' :字符映射到

这里是我的代码:

byte = "" 
    handleR = open(self.getInput()) 
    handleW = open(self.getOutput(), 'w') 
    file = handleR.readlines() 
    for line in file: 
     for a in range(0, len(line)): 
      chunk = result[ord(line[a])] 
      for b in chunk: 
       if (len(byte) < 8): 
        byte+=str(chunk[b]) 
       else: 
        char = chr(eval('0b'+byte)) 
        print(byte, char) 
        handleW.write(char) 
        byte = "" 
    handleR.close() 
    handleW.close() 

任何帮助表示赞赏,

谢谢

+0

当我读“二进制到ASCII”时,我以为你是以相反的方式,即''\ xdb''到''11011011'' :-) – 2010-06-25 05:28:08

我想你想要:

handleR = open(self.getInput(), 'rb') 
handleW = open(self.getOutput(), 'wb') 

这将确保你正在读写字节流。此外,您可以解析二进制字符串而无需评估:

char = chr(int(byte, 2)) 

当然,使用位操作会更快。您可以使用<<(左移)和|(按位或)来代替附加到字符串。

编辑:对于实际的写作,你可以使用:

handleW.write(bytes([char])) 

这将创建并从由一个单一的数字列表写入bytes

编辑2:更正,应该是:

handleW.write(bytes([int(byte, 2)])) 

没有必要使用chr

+0

谢谢你的回答,但是我怎么能直接用wb模式)写入(str)“11011011”到文件中? 不,我得到“TypeError:无法将str写入二进制流” – Mikk 2010-06-25 05:33:13

+0

非常感谢。 最后的工作和版本是handleW.write(字节(字符串(int(byte,2)),“utf-8”)) – Mikk 2010-06-25 06:06:19

+1

@Mikk,我以前的回答部分是错误的。它可以是'handleW.write(bytes([int(byte,2)]))'。 – 2010-06-25 06:25:54