设定以utf-8无BOM格式保存的文件foo.txt的内容如下:

abc你好

现在我们以byte为单位读取文件内容,并显示每个byte的16进制和10进制表示。

if __name__ == '__main__':
    f=open('foo.txt' ,'rb')
    f.seek(0,0)
    while True:
        byte = f.read(1)
        if byte == '':
            break
        else:
            hexstr =  "%s" % byte.encode('hex')
            decnum = int(hexstr, 16)
        print byte, hexstr, decnum
    f.close()
    print 'finish'
if __name__ == '__main__':
    f=open('foo.txt' ,'rb')
    f.seek(0,0)
    while True:
        byte = f.read(1)
        if byte == '':
            break
        else:
            hexstr =  "%s" % byte.encode('hex')
            decnum = int(hexstr, 16)
        print byte, hexstr, decnum
    f.close()
    print 'finish'

很简单,我们以为rb模式打开文件。每次读取时使用read(1),也就是取1个字节的数据,取得的数据作为str返回,若没有数据可取了,则返回空字符串''。byte是一个只有一个长度为1的字符串,hexstr是byte的16进制表示,内容的int函数将16进制表示的字符串hexstr转换为10进制整数decnum。

以下是运行结果:

a 61 97
b 62 98
c 63 99
� e4 228
� bd 189
� a0 160
� e5 229
� a5 165
� bd 189
finish