5

我似乎得到了不同的输出:

from StringIO import *

file = open('1.bmp', 'r')

print file.read(), '\n'
print StringIO(file.read()).getvalue()

为什么?是不是因为 StringIO 只支持文本字符串之类的?

4

3 回答 3

8

当您调用 时file.read(),它会将整个文件读入内存。然后,如果你file.read()再次调用同一个文件对象,它已经到达文件的末尾,所以它只会返回一个空字符串。

相反,请尝试重新打开文件:

from StringIO import *

file = open('1.bmp', 'r')
print file.read(), '\n'
file.close()

file2 = open('1.bmp', 'r')
print StringIO(file2.read()).getvalue()
file2.close()

您还可以使用该with语句使该代码更清晰:

from StringIO import *

with open('1.bmp', 'r') as file:
    print file.read(), '\n'

with open('1.bmp', 'r') as file2:
    print StringIO(file2.read()).getvalue()

顺便说一句,我建议以二进制模式打开二进制文件:open('1.bmp', 'rb')

于 2011-09-26T16:36:00.457 回答
5

第二个file.read()实际上只返回一个空字符串。您应该file.seek(0)倒带内部文件偏移量。

于 2011-09-26T16:45:28.940 回答
-1

您不应该使用"rb"open 而不是 just "r",因为此模式假定您将仅处理 ASCII 字符和 EOF?

于 2011-09-26T16:39:09.670 回答