window.open 参数

open函数可以打开一个文件。超级简单吧?大多数时候,我们看到它是这样使用的:

f =打开(& # 39;photo.jpg & # 39, 'r+& # 39;)jpgdata = f.read()f.close()我之所以现在写这篇文章,是因为大部分时间看到open被这样使用。上面的代码中有三个错误。你能把他们都指出来吗?如果没有,请继续阅读。在这篇文章的结尾,你会知道上面的代码错在哪里,更重要的是,你可以在自己的代码中避免这些错误。现在让我们从基础开始:

open的返回值是从操作系统委托给Python程序的文件句柄。一旦处理完文件,您将需要返回文件句柄,这样您的程序就不会超过一次可以打开的文件句柄的最大数量。

显式调用close会关闭文件句柄,但前提是读取成功。如果任何异常发生在f = open之后(…),f.close()不会被调用(取决于Python解释器的做法,可能还是会返回文件句柄,不过那是另一个话题了)。为了确保无论异常是否被触发,文件都可以被关闭,我们将它包装在一个with语句中:

打开(& # 39;photo.jpg & # 39, 'r+& # 39;as f: jpgdata = f.read()open的第一个参数是文件名。第二个(模式打开模式)决定文件如何打开。

如果你想读取文件,传入r如果你想读取并写入文件,传入r+如果你想覆盖写入文件,传入w如果你想在文件末尾附加内容,传入a

尽管还有其他几个有效的模式字符串,但您可能永远也不会使用它们。模式很重要,不仅因为它改变行为,还因为它可能导致权限错误。例如,如果我们在写保护目录中打开一个jpg文件,打开(…,&# 39;r+& # 39;)就会失败。模式可能包含扩展字符;让我们也以二进制模式(您将获得字节字符串)或文本模式(字符串)打开文件。

一般来说,如果文件格式是人写的,更有可能是文本模式。Jpg图像文件一般不是人写的(实际上也不是人直接可读的),所以你应该在模式字符串后面加一个b以二进制模式打开(可以看看开头的例子,正确的方式应该是rb)。
如果你在文本模式下打开某个东西(例如,添加一个T,或者只使用r/r+/w/a),你还必须知道使用哪种编码。对于计算机来说,所有的文件都是字节,而不是字符。

不幸的是,在Pyhon 2.x版本中,open不支持display的指定编码。但是,Python 2.x和3.x中提供了io.open函数(其中它是open的别名),它可以做正确的事情。可以传入编码关键字参数来传入编码。

如果您没有传入任何编码,将选择由系统和Python指定的默认选项。你可能很想依赖这个默认选项,但是这个默认选项经常是错误的,或者默认编码实际上不能表达文件中的所有字符(在Python 2.x和/或Windows中经常会出现这种情况)。
所以选择一个代码。Utf-8是非常好的编码。当你写一个文件的时候,你可以选择一个你喜欢的代码(或者最终读取你文件的程序喜欢的代码)。

那你怎么发现你正在读的文件是用什么样的代码写的呢?不幸的是,没有非常简单的方法来检测编码。在不同的编码中,同一个字节可以表示不同但同样有效的字符。因此,您必须依靠元数据(例如,在HTTP头信息中)来查找编码。越来越多的文件格式将编码定义为UTF-8。

有了这些基础知识,我们来写一个程序,读取一个文件,检查是否是JPG(提示:这些文件以字节FF D8开头),把输入文件的描述写成文本文件。

打开时导入低(& # 39;photo.jpg & # 39, 'rb & # 39)作为INF:jpg data = INF . read()if jpg data . starts with(b & # 39;\\ xff \\ xd8 & # 39):text = u & # 39这是一个JPEG文件(长度为%d字节)\\ n & # 39else:text = u & # 39;这是一个随机文件(长度为%d字节)\\ n & # 39用io . open(& # 39;summary.txt & # 39, 'w & # 39,编码= & # 39;utf-8 & # 39;)作为outf:outf . write(text % len(jpg data))我相信你现在会正确使用open了!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论