Python读取二进制的.jpg文件为初学者

时间:2013-11-04 22:23:26

标签: python binary jpeg exif

我正在尝试了解有关照片中包含的exif数据的更多信息。我不明白的是为什么我从以下代码得到结果:

file = open("IMG.JPG", "rb")
print(file.read(2))
print(file.read(2))

给我一​​个结果:

>>>
b'\xff\xd8'
b'\xff\xe1'

为什么他们不一样?第一个结果行是有道理的,FFD8表示它是一个jpeg。

3 个答案:

答案 0 :(得分:5)

这是因为每次调用file.read(x)时,它都会读取 next x项,而不是第一个 x项。

答案 1 :(得分:1)

一旦你调用它,

file.read将继续阅读下一部分。如果你把它读到最后,并再次调用它,它将不返回任何内容。

例如,我有一个名为test.txt的文件,如下所示:

abcdefg
hijklmn

让我们试着读一下:

>>> with open('test.txt') as f:
    data = f.read(7)
    data2 = f.read()


>>> data
'abcdefg'
>>> data2
'\nhijklmn' 

请参阅?

现在,如果你想两次获得相同的东西,你可以使用file.seek将阅读回到开头:

>>> with open('test.txt') as f:
    data = f.read(7)
    f.seek(0)
    data2 = f.read(7)


>>> data
'abcdefg'
>>> data2
'abcdefg'

希望这有帮助!

答案 2 :(得分:0)

每次阅读()都会移动文件指针。如果你想反复阅读同一个东西(为什么?)那么你可以使用

filename.seek(0)

将文件指针倒回到文件的开头。