Python之IO编程——文件读写、StringIOBytesIO、操作文件和目录、序列化
- 作者: 五速梦信息网
- 时间: 2026年04月04日 13:31
IO编程
IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。从磁盘读取文件到内存,就只有Input操作,反过来,把数据写到磁盘文件里,就只是一个Output操作。
由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题。举个例子来说,比如要把100M的数据写入磁盘,CPU输出100M的数据只需要0.01秒,可是磁盘要接收这100M数据可能需要10秒,怎么办呢?有两种办法:
第一种是CPU等着,也就是程序暂停执行后续代码,等100M的数据在10秒后写入磁盘,再接着往下执行,这种模式称为同步IO;
另一种方法是CPU不等待,只是告诉磁盘,“您老慢慢写,不着急,我接着干别的事去了”,于是,后续代码可以立刻接着执行,这种模式称为异步IO。
同步和异步的区别就在于是否等待IO执行的结果。异步IO来编写程序性能会远远高于同步IO,但是异步IO的缺点是编程模型复杂
一、文件读写读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
1.从文件中读取数据
1.1读取整个文件
- 1
- 2
- 3
- 1
- 2
函数open() 接受一个参数:要打开的文件的名称。Python在当前执行的文件所在的目录中查找指定的文件,函数open() 返回一个表示文件的对象。在这里,open(‘pi_digits.txt’) 返回一个表示文件pi_digits.txt 的对象;Python将这个对象存储在我们将在后面使用的变量中。
关键字with 在不再需要访问文件后将其关闭。
PS:在这个程序中,注意到我们调用了open() ,但没有调用close() ;调用open() 和close() 来打开和关闭文件,如果程序存在bug,导致close() 语句未执行,文件将不会关闭。未妥善地关闭文件可能会导致数据丢失或受损。如果在程序中过早地调用close() ,需要使用文件时它已关闭(无法访问),会导致更多的错误。通过使用前面所示的结构,可让Python去确定:你只管打开文件,并在需要时使用它,Python自会在合适的时候自动将其关闭。
函数read() 读取这个文件的全部内容,并将其作为一个长长的字符串存储在变量contents中。这样,通过打印contents 的值,就可将这个文本文件的全部内容显示出来。相比于原始文件,该输出不同的地方是末尾多了一个空行。read() 到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一个空行。要删除多出来的空行,可在print 语句中使用rstrip() :
- 1
- 2
read()read(size)readline()readlines()list
read()read(size)readlines()
- 1
open()read()read()StringIO
‘rb’
- 1
- 2
open()encoding
- 1
- 2
UnicodeDecodeErroropen()errors
1.2文件路径
在Windows系统中,在文件路径中使用反斜杠(\ )而不是斜杠(/ ):
在相对文件路径行不通时,可使用绝对文件路径,绝对路径通常比相对路径更长,因此将其存储在一个变量中,再将该变量传递给open() 会有所帮助。在Linux和OS X中,绝对路径类似于下面这样:
- 1
在Windows系统中,它们类似于下面这样:
- 1
通过使用绝对路径,可读取系统任何地方的文件。就目前而言,最简单的做法是,要么将数据文件存储在程序文件所在的目录,要么将其存储在程序文件所在目录下的一个文件夹(如text_files)中。
1.3逐行读取
- 1
- 2
- 3
- 4
在这个文件中,每行的末尾都有一个看不见的换行符,而print 语句也会加上一个换行符,因此每行末尾都有两个换行符:一个来自文件,另一个来自print 语句。
- 1
- 2
- 3
- 4
要消除这些多余的空白行,可在print 语句中使用rstrip() :
- 1
- 2
- 3
- 4
1.4创建一个包含文件各行内容的列表
- 1
- 2
- 3
- 4
- 5
1.5使用文件内容
将文件读取到内存中后,就可以以任何方式使用这些数据了。下面以简单的方式使用圆周率的值。首先,我们将创建一个字符串,它包含文件中存储的所有数字,且没有任何空格:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
注意
读取文本文件时,Python将其中的所有文本都解读为字符串。如果你读取的是数字,并要将其作为数值使用,就必须使用函数int() 将其转换为整数,或使用函数float() 将其转换为浮点数。
相关文章
-
python之itemgetter函数:对字典列表进行多键排序
python之itemgetter函数:对字典列表进行多键排序
- 互联网
- 2026年04月04日
-
Python之mysql数据库更新表数据接口实现
Python之mysql数据库更新表数据接口实现
- 互联网
- 2026年04月04日
-
Python之Numpy库常用函数大全(含注释)(转)
Python之Numpy库常用函数大全(含注释)(转)
- 互联网
- 2026年04月04日
-
Python在线 某个网址下的所有文件
Python在线 某个网址下的所有文件
- 互联网
- 2026年04月04日
-
python语言中的数据类型之字典
python语言中的数据类型之字典
- 互联网
- 2026年04月04日
-
python语言中的数据类型
python语言中的数据类型
- 互联网
- 2026年04月04日





