【问题标题】:Why can I not read more than 16 bytes of a JPEG file in Python?为什么我不能在 Python 中读取超过 16 个字节的 JPEG 文件?
【发布时间】:2011-01-12 00:46:08
【问题描述】:

我正在尝试在 Python 中读取 JPG 图像。

到目前为止我有:

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

print "'%s'"% (ima)

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

当它尝试读取 32 或更多字节时,输出将与读取 16 字节时相同。为什么我无法读取超过 16 字节的 jpeg 图片?

【问题讨论】:

    标签: python image byte jpeg


    【解决方案1】:

    这里有两个问题:

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

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

    
    f = open("test.jpg", "rb")
    ima = f.read(16)
    
    print "%s" % (binascii.hexlify(ima))
    

    【讨论】:

    • 比起 binascii 中那个 horribly 命名的函数,repr() 在这里可能更有用。
    • @yurymik (16) 参数是指它以 16 字节读取,还是以 16 位为单位读取?
    • @joshsvoss: file.read([size]) 从文件中读取最多 size 个字节(如果读取在获得 size 个字节之前达到 EOF,则更少)。 docs.python.org/2/library/stdtypes.html
    • 使用 f.read() 读取完整文件,无需查找文件大小或循环 f.readline() 即可查看每行的输出
    【解决方案2】:

    您可能需要将打开模式设置为二进制:

    f = open("test.jpg", "rb") # 'rb' here means "read mode, binary"
    

    请参阅this similar question 以获得更详尽的说明。

    【讨论】:

      猜你喜欢
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多