门业网站 模板,wordpress自动压缩图,网站可信度建设,网站后台管理系统模板htmlopen函数可以打开一个文件。超级简单吧#xff1f;大多数时候#xff0c;我们看到它这样被使用#xff1a;f open(photo.jpg, r)jpgdata f.read()f.close()我现在写这篇文章的原因#xff0c;是大部分时间我看到open被这样使用。有三个错误存在于上面的代码中。你能把它们…open函数可以打开一个文件。超级简单吧大多数时候我们看到它这样被使用f open(photo.jpg, r)jpgdata f.read()f.close()我现在写这篇文章的原因是大部分时间我看到open被这样使用。有三个错误存在于上面的代码中。你能把它们全指出来吗如不能请读下去。在这篇文章的结尾你会知道上面的代码错在哪里而且更重要的是你能在自己的代码里避免这些错误。现在我们从基础开始open的返回值是一个文件句柄从操作系统托付给你的Python程序。一旦你处理完文件你会想要归还这个文件句柄只有这样你的程序不会超出一次能打开的文件句柄的数量上限。显式地调用close关闭了这个文件句柄但前提是只有在read成功的情况下。如果有任意异常正好在f open(...)之后产生f.close()将不会被调用(取决于Python解释器的做法文件句柄可能还是会被归还但那是另外的话题了)。为了确保不管异常是否触发文件都能关闭我们将其包裹成一个with语句:with open(photo.jpg, r) as f:jpgdata f.read()open的第一个参数是文件名。第二个(mode打开模式)决定了这个文件如何被打开。如果你想读取文件传入r如果你想读取并写入文件传入r如果你想覆盖写入文件传入w如果你想在文件末尾附加内容传入a虽然有若干个其他的有效的mode字符串但有可能你将永远不会使用它们。mode很重要不仅因为它改变了行为而且它可能导致权限错误。举个例子我们要是在一个写保护的目录里打开一个jpg文件 open(.., r)就失败了。mode可能包含一个扩展字符让我们还可以以二进制方式打开文件(你将得到字节串)或者文本模式(字符串)一般来说如果文件格式是由人写的那么它更可能是文本模式。jpg图像文件一般不是人写的(而且其实不是人直接可读的)因此你应该以二进制模式来打开它们方法是在mode字符串后加一个b(你可以看看开头的例子里正确的方式应该是rb)。如果你以文本模式打开一些东西(比如加一个t,或者就用r/r/w/a)你还必须知道要使用哪种编码。对于计算机来说所有的文件都是字节而不是字符。可惜在Pyhon 2.x版本里open不支持显示地指定编码。然而io.open函数在Python 2.x中和3.x(其中它是open的别名)中都有提供它能做正确的事。你可以传入encoding这个关键字参数来传入编码。如果你不传入任意编码一个系统 - 以及Python -指定的默认选项将被选中。你也许被诱惑去依赖这个默认选项但这个默认选项经常是错误的或者默认编码实际上不能表达文件里的所有字符(这将经常发生在Python 2.x和/或Windows)。所以去挑选一个编码吧。utf-8是一个非常好的编码。当你写入一个文件你可以选一个你喜欢的编码(或者最终读你文件的程序所喜欢的编码)。那你怎么找出正在读的文件是用哪种编码写的呢好吧不幸的是并没有一个十分简单的方式来检测编码。在不同的编码中同样的字节可以表示不同但同样有效的字符。因此你必须依赖一个元数据(比如在HTTP头信息里)来找出编码。越来越多的是文件格式将编码定义成UTF-8。有了这些基础知识我们来写一个程序读取一个文件检测它是否是JPG(提示这些文件头部以字节FF D8开始)把对输入文件的描述写入一个文本文件。import iowith open(photo.jpg, rb) as inf:jpgdata inf.read()if jpgdata.startswith(b\xff\xd8):text uThis is a JPEG file (%dbytes long)\nelse:text uThis is a random file (%dbytes long)\nwith io.open(summary.txt, w, encodingutf-8) as outf:outf.write(text % len(jpgdata))我敢肯定现在你会正确地使用open啦