StringIO可以用于二进制文件吗?
我发现我得到的输出结果不一样:
from StringIO import *
file = open('1.bmp', 'r')
print file.read(), '\n'
print StringIO(file.read()).getvalue()
这是为什么呢?是不是因为StringIO只支持文本字符串之类的原因?
3 个回答
-1
你是不是应该用 "rb"
来打开文件,而不是仅仅用 "r"
呢?因为 "r"
模式假设你只会处理 ASCII 字符和文件结束符(EOF)。
5
第二次使用 file.read()
时,实际上返回的只是一个空字符串。你应该先用 file.seek(0)
来把文件的读取位置重新调整到开头。
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')