file.read没有返回文件(.png)内容但奇怪的5字节的东西

时间:2014-09-27 18:11:00

标签: python file-io

我正在编写一个非常简单的Web服务器,基于BaseHTTPServer。 现在我们正在寻找什么(我是一个python启动器)是python知道存在的.png文件,没有正确读取;相反,一个奇怪的5字节字符串与" PNG"被读了。 所有其他文件,如html,js等,都可以正确读取和发送。

不用多说,我的代码摘录在do_GET方法中:

localfilepath = curdir + sep + self.path
f = open(localfilepath)

fileContent = f.read()
fileType = os.path.splitext(localfilepath)[1]

print "isfile(%s): %s" % (self.path, str(os.path.isfile(localfilepath)))
if( len(fileContent) > 10 ):
    print "read %s file with length %s" % (fileType, str(len(fileContent)))
else:
    print "!read %s file: (length: %s, content: %s)" % (fileType, str(len(fileContent)), fileContent)

日志显示:

GET received; path: /AdaptrisSurvey/images/btn1_hover.png
127.0.0.1 - - [27/Sep/2014 19:18:03] "GET /AdaptrisSurvey/images/btn1_hover.png HTTP/1.1" 200 -
isfile(/AdaptrisSurvey/images/btn1_hover.png): True
!read .png file: (length: 5, content: ëPNG
)

(最后的结束括号是换行符,但我不知道如何在没有段落垂直缩进的情况下执行此操作。)

由于它适用于其他文件,btn1_hover.png文件存在并且是一个真实的图像,可以在我的标准图像查看器中显示,我对此没有想法。

2 个答案:

答案 0 :(得分:2)

您需要以二进制模式打开文件:

f = open(localfilepath, "rb") 

否则,只要点击SUBPNG header字符,就会停止阅读。

答案 1 :(得分:1)

如果你真的想要二进制文件的文件大小,而不是长度 - perhaps see this question引用python docs -

os.path.getsize(path) #Return the size, in bytes, of path. Raise os.error if the file does not exist or is inaccessible.