给Python新手的一道面试题:如何正确读写文件

  这是我司前段时间招人笔试中一道比较简单题,面向初中级程序员,不过很少有人能回答完整的,问题本身不难,主要还是考察动手能力和基本代码功,准备找工作的先收藏留着以后用得着。

  f.write(upython之禅)分析:Python 提供了内建函数open用于读写文件,函数返回一个文件对象,可对文件进行读、写操作,用参数 mode 来控制。

  这是一个字符编码的问题,编码错误是Python程序员最经常遇到的错误,之前在号中写过关于编码错误的原因。

  之所以报错是程序没法直接保存 unicode 字符串,要经过编码转换成而 str 类型的二进制字节序列才能够保存。

  write 方自动帮你做编码转换,默认使用 ascii 编码格式,因为 ascii 字符集不能处理中文,所以出现了 UnicodeEncodeError 错误。

  f.write(content)第二个问题是文件对象没有正常关闭,有人可能要问了,不关闭会有什么影响,操作完文件时,如果不关闭文件,那么将对系统造成资源浪费,因为系统可打开的文件描述符数量是有,比如 Linux 是 65536,所以必须要关闭文件。

  因为有可能在调用 open 函数的时候就报错了,比如因为权限问题没法在该目录读写文件,此时,文件对象都没创建成功,调用close肯定会报错。

  再比如在第4行 write 的时候有可能报错,因为磁盘空间不足,这个时候报错了, close 方法就没有机会执行了。

  正确地做法是用 try except 对异常进行捕获。注意,open 函数要在 try 代码块外面

  f.close()不过,更优雅的写法是用with ... as写法,因为 文件对象实现了上下文管理器协议,程序进入 with 语句块时,会把文件对象赋值给变量 f,在程序退出 with 语句块的时候会地自动调用 close 方法。

  读写文件时,应该考虑的问题包括:字符编码问题,操作完文件要即时关闭文件描述符,同时还要注意代码的兼容性。

  转载文章仅代表原作者观点,不代表本站立场;如有侵权、违规,请联系我方删除。