1

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

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

给我一个结果:

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

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

4

3 回答 3

5

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

于 2013-11-04T22:28:02.020 回答
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'

希望这可以帮助!

于 2013-11-04T22:32:17.960 回答
0

每次 read() 都会移动文件指针。如果您想重复阅读相同的内容(为什么?),那么您可以使用

filename.seek(0)

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

于 2013-11-04T22:34:11.270 回答