为什么我在Python中无法读取超过16个字节的JPEG文件?

5

我想在Python中读取一张JPG图片。

目前为止,我的代码是:

f = open("test.jpg")
ima = f.read(16)

print "'%s'"% (ima)

它读取了16个字节并在控制台显示字符串,但似乎我不能显示超过32个字节。为什么?

当尝试读取32个或更多字节时,输出结果与读取16个字节时相同。为什么我不能读取超过16个字节的jpeg图像?

2个回答

11

这里有两个问题:

  1. 将读取模式设置为二进制。这样file.read函数就不会尝试转换 '\r\n' 序列。

  2. 你正在尝试向控制台打印以 NULL 结尾的字符串。 print 函数会找到您字符串中的第一个零字符并终止。使用binascii.hexlify将其转换为十六进制:


f = open("test.jpg", "rb")
ima = f.read(16)

print "%s" % (binascii.hexlify(ima))

4
与其使用 binascii 中那个名字 可怕 的函数,使用 repr() 或许更加有用。 - Greg Hewgill
@yurymik,(16)参数是指它读取16个字节,还是以16位为单位读取? - AllTradesJack
1
@joshsvoss: file.read([size]) 从文件中最多读取 size 个字节(如果在获取 size 个字节之前遇到 EOF,则读取的字节数会更少)。https://docs.python.org/2/library/stdtypes.html - yurymik
使用f.read()读取整个文件,不需要查找文件大小或循环使用f.readline()查看每行的输出。 - kkk

5
您可能需要将打开模式设置为二进制模式:
f = open("test.jpg", "rb") # 'rb' here means "read mode, binary"

请参考类似的问题,以获得更为详细的描述。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接