在python2中可以,但是在python3中不起作用

汉。索罗
#!/usr/bin/env python3

f = open('dv.bmp', mode='rb')
slika = f.read()
f.closed

pic   = slika[:28]
slika = slika[54:] 
# dimenzije originalnog bitmapa
pic_w = ord(pic[18]) + ord(pic[19])*256
pic_h = ord(pic[22]) + ord(pic[23])*256
print(pic_w, pic_h)

为什么此代码在python3中不起作用(在python2中工作正常),或者如何在python3中将二进制文件读取为字符串类型?

glibdud

Python 2.x中,二进制模式(例如'rb')仅影响Python解释行尾字符的方式:

在Windows上,'b'追加到模式以二进制方式打开文件,所以也有类似的模式'rb''wb''r+b'Windows上的Python区分文本文件和二进制文件。读取或写入数据时,文本文件中的行尾字符会自动更改。对于ASCII文本文件来说,对文件数据进行这种幕后修改是可以的,但是它会破坏二进制数据,例如inJPEGEXEfiles。读写此类文件时,请务必小心使用二进制模式。在Unix上,将a附加'b'到该模式并没有什么坏处,因此您可以在平台上独立地将其用于所有二进制文件。

但是,在Python 3.x中,二进制模式还会更改结果数据的类型:

通常,文件以文本模式打开,这意味着您在文件中读取和写入字符串,这些字符串以特定的编码进行编码。如果未指定编码,则默认值为平台相关的(请参阅参考资料open())。'b'附加到该模式的文件将以二进制模式打开文件:现在以字节对象的形式读取和写入数据。此模式应用于所有不包含文本的文件。

由于读取的结果是一个字节对象,因此对其进行索引将得到一个整数,而不是Python 2中的一个单字符字符串。将该整数传递给ord()函数会引发注释中提到的错误

解决方案就是忽略ord()Python 3中调用,因为从索引字节对象获得的整数与从调用ord()等效字符串获得的整数相同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

python2中的python3 datetime.timestamp?

为什么我的想法在python2中不起作用?

在python2和python3中映射

ForEach在mongodb上不起作用,但是在本地数组声明中可以正常工作

MongoDB(pymongo)$ avg和$ stdDevPop在$ project中不起作用,但是在$ group中它们可以完美地工作

Eslint在VScode中不起作用,但是在终端中起作用

pwntools Python模块在python2中不起作用,但在python3中起作用

为什么“请求”模块超时在python3中不起作用?

为什么单词边界在python3中不起作用?

我的反应状态在函数中不起作用,但是在呈现时起作用

getUserMedia()在普通Chrome中不起作用,但是在启动pwa-chrome时起作用

IP地址字符串提取在Python3中不起作用

'.contains'在android手机中不起作用,但是在网页中可以正常工作

我想做样式表,但是在PHP中不起作用

Laravel 4分页不起作用链接可以,但是在每个页面中显示所有结果

为什么此功能不起作用,但是在Eclipse中却不显示错误?

在php中执行sql查询不起作用,但是在phpmyadmin中执行查询

内部联接在PHP中不起作用,但是在phpMyAdmin SQL中起作用

Python3请求-不起作用

函数仅在python shell中起作用,但是在调用另一个函数时不起作用吗?

python3中的Tkinter,菜单栏不起作用

Python脚本在crontab中不起作用,但是在没有

Python3 Django的ManyToMany关系中的.add()函数不起作用

For 循环在 python 3 中不起作用

为什么python3中的round()内置函数对我不起作用?

unicode 方法在 Python3 中不起作用

Pynput 中的 Mouse.position 不起作用 [python2、opencv、mac、jupyter]

为什么python3中的循环索引递减不起作用?

为什么这个解码函数在 python2 中不起作用?