《老鸟python 系列》视频上线了,全网稀缺资源,涵盖python人工智能教程,爬虫教程,web教程,数据分析教程以及界面库和服务器教程,以及各个方向的主流实用项目,手把手带你从零开始进阶高手之路!点击 链接 查看详情




第八章:文件编程

阅读:207567622    分享到

文件编程主要包含文件 IO 和对文件的操作,在学习文件编程之前,我们现弄明白两个概念:IO 和文件。

IO 在计算机中指 Input/Output,也就是输入和输出。前面我们学习的 print 和 input 函数就是 IO 编程,我们通过 print 函数把内存中的数据输出到显卡(显卡会把数据输出到显示器),input 函数把键盘上的数据输入到内存。

如果我们在编写程序中需要内存和磁盘交互数据,就需要磁盘 IO,也就是把内存中的数据写入磁盘和把磁盘中的数据读入内存。

如果我们需要通过网络进行数据传输,就需要网络 IO,也就是把内存中的数据写入网卡(网卡会通过网络把数据发送到对方机器网卡)和把网卡中的数据读入内存。

我们在程序中用内存和键盘,显卡,磁盘,网卡等外部设备(后面我们统称外设)直接进行数据交互是不允许的, 这时候我们的程序可以通过操作系统间接和那些外设交互数据。 具体的实现过程是:我们的程序首先向操作系统申请一个文件对象用于和外设进行数据交互, 对于从内存中写数据到外设,我们的程序通过文件对象写入数据到操作系统,然后操作系统把数据写入外设中; 对于从外设中读数据到内存,我们的程序通过文件对象告诉操作系统要读取数据,操作系统从外设中取出数据返回给程序。

这种通过文件对象进行数据读写的行为,我们广义上都称作文件 IO。 更有甚者,我们通过文件对象在内存和内存之间进行数据交互也叫做文件 IO,具体我们称之为内存 IO。 当然内存和内存之间可以直接进行数据交互,一般情况下我们没必要在内存之间交互数据使用文件对象,除非想装逼的情况下,比如我们本章小节中要学的 StringIO 和 BytesIO。

文件 IO 中最常用的是磁盘 IO 和 网络 IO,并且这两种 IO 是我们在项目需求中最常用的需求,对于互联网社会的今天,处处离不开网络和存储。 由于 CPU 和内存的速度远远高于外设的速度,所以,在 IO 编程中,就存在速度严重不匹配的问题。 比如要把 1G 的数据写入磁盘,CPU 输出 1G 的数据只需要 0.1 秒,可是磁盘要接收这 1G 数据可能需要 100 秒,怎么办呢?同样通过网络发送数据也遇到同样的问题。

我们以磁盘 IO 为例来分析如何处理 CPU 和磁盘速度严重不匹配的问题:第一种方法是 CPU 等着,也就是程序暂停执行后续代码,等 1G 的数据在 100 秒后写入磁盘,再接着往下执行,这种模式称为同步 IO; 第二种方法是 CPU 不等待,只是告诉磁盘,“你慢慢忙,不着急,我先去干其它事情了,我自己会不定时来查看你的状态或者你干完后通知我一声”,于是,CPU 继续执行后续的代码,这种模式称为异步 IO。

“你慢慢忙,不着急,我先去干其它事情了,我自己会不定时来查看你的状态”,这种异步 IO 称之为轮询模式; “你慢慢忙,不着急,我先去干其它事情了,你干完后通知我一声”,这种异步 IO 称之为通知模式。总之,异步 IO 的复杂度远远高于同步 IO。

本章我们要学习的 IO 编程都是同步模式,而且只针对磁盘 IO 和内存 IO。对于异步模式学习和网络 IO 知识点学习,我们在后续章节中讲解。

文件 IO

读文件

写文件

文件对象

操作文件和目录

windows 和 linux 命令行操作文件和目录

Python 操作文件的函数

Python 操作目录的函数

Python Python 操作文件名和目录名的函数

使用高级模块 shutil 操作文件和路径

StringIO 和 BytesIO

StringIO

BytesIO

内存 IO(StringIO 和 BytesIO) 和文件 IO 的主要区别

序列化

pickle 模块

json 模块


如果以上内容对您有帮助,请老板用微信扫一下赞赏码,赞赏后加微信号 birdpython 领取免费视频。


登录后评论

user_image
范德林德第一劳模
2020年9月14日 10:05 回复

前面很多的东西学学忘忘,管怎样还是希望 能认真理解这一门语言,能够驾驭网站开发和基本的数据爬虫,奥利给!!!


user_image
以前我没得选,现在我想选择割韭菜
2020年7月24日 23:48 回复

同步IO: 等结果,不复杂

异步IO: 不等结果,复杂


user_image
飄夢
2020年7月9日 12:23 回复

如果是服务员跑过来找到你,这是回调模式, 如果服务员发短信通知你,你就得不停地检查手机,这是轮询模式。


user_image
Belleve-PLT
2019年9月3日 09:17 回复

从9月份断断续续学习到现在,继续加油


user_image
莴苣牛批
2019年8月26日 11:20 回复

python是同步IO用的多吗?nodejs中各种回调让人崩溃。


user_image
龙浩民
2019年6月6日 03:54 回复

总结的很好