Python 核心技术概述(五)
Python 输入与输出
输入输出基础
- 最简单直接的输入来自键盘操作:
- input() 函数暂停程序运行,同时等待键盘输入;直到回车被按下,函数的参数即为提示语,输入的类型永远是字符串型(str)。
- 把 str 强制转换为 int 请用 int(),转为浮点数请用 float()。
- 在生产环境中使用强制转换时,请记得加上 try except。
文件输入输出
- 命令行的输入输出,只是 Python 交互的最基本方式,适用一些简单小程序的交互。而生产级别的 Python 代码,大部分 I/O 则来自于文件、网络、其他进程的消息等等。
- 首先我们需要先了解一下,计算机中文件访问的基础知识。
- 事实上,计算机内核(kernel)对文件的处理相对比较复杂,涉及到内核模式、虚拟文件系统、锁和指针等一系列概念。
- 我们先要用 open() 函数拿到文件的指针。
- 其中,第一个参数指定文件位置(相对位置或者绝对位置);
- 第二个参数,如果是 ‘r’表示读取,如果是’w’ 则表示写入,当然也可以用 ‘rw’ ,表示读写都要。a 则是一个不太常用(但也很有用)的参数,表示追加(append),这样打开的文件,如果需要写入,会从原始文件的最末尾开始写入。
- 在拿到指针后,我们可以通过 read() 函数,来读取文件的全部内容。代码 text = fin.read() ,即表示把文件所有内容读取到内存中,并赋值给变量 text。
- 我们可以给 read 指定参数 size ,用来表示读取的最大长度。
- 还可以通过 readline() 函数,每次读取一行,这种做法常用于数据挖掘(Data Mining)中的数据清洗,在写一些小的程序时非常轻便。如果每行之间没有关联,这种做法也可以降低内存的压力。
- write() 函数,可以把参数中的字符串输出到文件中,也很容易理解。
- open() 函数对应于 close() 函数。
- 如果你打开了文件,在完成读取任务后,就应该立刻关掉它。
- 而如果你使用了 with 语句,就不需要显式调用 close()。
- 在 with 的语境下任务执行完毕后,close() 函数会被自动调用,代码也简洁很多。
- 最后需要注意的是,所有 I/O 都应该进行错误处理。
- 因为 I/O 操作可能会有各种各样的情况出现,而一个健壮(robust)的程序,需要能应对各种情况的发生,而不应该崩溃(故意设计的情况除外)。
JSON 序列化与实战
- JSON(Javascript Object Notation)是一种轻量级的数据交换格式,它的设计意图是把所有事情都用设计的字符串来表示,这样既方便在互联网上传递信息,也方便人进行阅读(相比一些 binary 的协议)。
- json.dumps() 这个函数,接受 Python 的基本数据类型,然后将其序列化为 string;
- json.loads() 这个函数,接受一个合法字符串,然后将其反序列化为 Python 的基本数据类型。
- 请记得加上错误处理。不然,哪怕只是给 json.loads() 发送了一个非法字符串,而你没有 catch 到,程序就会崩溃了。
- 当开发一个第三方应用程序时,你可以通过 JSON 将用户的个人配置输出到文件,方便下次程序启动时自动读取。这也是现在普遍运用的成熟做法。
本节小结
- I/O 操作需谨慎,一定要进行充分的错误处理,并细心编码,防止出现编码漏洞。
- 编码时,对内存占用和磁盘占用要有充分的估计,这样在出错时可以更容易找到原因。
- JSON 序列化是很方便的工具,要结合实战多多练习。
- 代码尽量简洁、清晰,哪怕是初学阶段,也要有一颗当元帅的心。