- 8.1 文件对象
- 8.1.1 打开文件
- 8.1.2 关闭文件
- 8.1.3 文件对象的属性
- 8.1.4 文件对象的方法
- 8.2 文件系统访问
- 8.2.1 os模块
- 8.2.2 文件路径 *** 作
- 8.3 文件数据处理
- 8.3.1 按字节处理数据
- 8.3.2 使用文件迭代器
- 8.3.3 结构化数据存储
- 8.3.4 序列化存储
- 8.4 综合案例
- 8.5 总结
学习目标:
- 了解什么是文件及文件对象
- 掌握文件对象属性及方法
- 掌握文件系统 *** 作
- 理解文件数据处理
思维导图:
Python使用内置函数open()
打开文件,创建file对象
。
在系统中,只有存在file对象后,用户才能对文件进行相应的 *** 作。
语法格式为:open(file, mode='r', encoding=None)
各个参数的含义如下:
file
:代表需要打开的文件名。
mode
:表示该文件的打开模式,该参数是可选的,默认为’r '。
encoding
:用于指定文件的编码方式。
mode参数指定打开文件时的 *** 作方式,文件打开的主要模式见下表。
默认情况下(默认是UTF-8
)文件是以文本形式打开,因此文件读出
和写入
的数据字符串均会被编码成特定的编码方式
。
例如:在当前目录中以覆盖写的方式打开file.txt文件
file=open('file,txt','w')
print('文件名:',file.name)
结果:
在项目所在文件夹下创建了file.txt文件
同时控制台输出如下:
文件名: file,txt
8.1.2 关闭文件
关闭文件使用的是内置的close()方法
:
用于关闭该文件,并清除文件缓冲区里的信息,关闭文件后不能再进行写入。
语法格式如下:
fileObject.close()
当一个文件对象的引用被重新指定给另一个文件时,系统会关闭先前打开
的文件(意思是给文件对象赋了一个新的值,那系统会关闭之前的那个文件。
)
以下代码演示了close()方法的具体用法:
在当前目录汇总
open()方法可以返回具备比较丰富的属性和成员方法的文件对象,可以通过访问文件不同属性来获取已打开文件的状态、模式等。
下表列出了文件对象常用的属性。
下述代码实例演示了如何获取和使用文件对象属性。
除了打开和关闭这两种基本的文件 *** 作外,Python语言还提供了很多文件处理相关的对象方法,如文件的读取、写入、定位等。
1. 文件基本读写
- Python语言中提供了read()和write()方法实现对文件数据的基本读写。
- 具体过程:
① 通过open()方法获得文件对象句柄;
② 通过write()方法和read()方法进行写入和读取数据。
下述代码实例演示了下面是一个将字符串写入到文件tmp.txt:
2. 文件按行读写
Python语言中为了提高读写的效率,还提供了按行读写的方式,实现逐行数据处理。
文件按行读写涉及的主要方法有readline()
、readlines()
和writelines()
等。
- readline()方法读取单独的一行,即从当前位置开始到一个换行符结束之前的所有字节,包括这个换行符。
- readlines()方法读取一个文件中所有的行并将其作为列表返
- writelines()方法会把指定字符串写入文件。
下述代码实例演示了按行读写 三个方法的具体过程。
3. 文件指针
- 在Python语言中,支持使用文件指针的形式定位文件的读写位置,其主要由
tell()
方法和seek()
方法来实现。 - tell()方法返回一个整数,该数值计量了自文件开头到指针处的比特数;可以使用seek(offset[,from_what])方法改变文件对象的指针。
offset参数表示从指定引用位置移动的比特数
from_what值为0时表示自文件起始处开始,为1时表示自当前文件指针位置开始,为2表示自文件末尾开始。
下述代码实例演示了如何使用seek()方法。
在Python中,对文件系统的访问大多通过的os模块实现在Python语言中,os模块提供了有很多对文件目录进行 *** 作的方法,os模块常用方法下表。
- 在实际的编程过程中,os.path模块被用来获取文件所在路径信息,os.path模块主要用于获取文件的属性。
- 以下代码示意了如何查看当前路径及路径下的文件
通过迭代的方法按字节处理是最常见的对文件数据处理的方式;
如下述代码演示了如何在在while循环中使用read方法,通过循环对每个字节进行读取;
使用for循环迭代读取文件内容,可以每次循环读取其中一行内容,提高读取效率,如下代码所示。
Python语言提供的文件读取方法read()
只能返回字符串数据,对于数值类型的读取,需要将其再借助int()等数值转换方法进行数值转换。
为了编写和保存复杂数据类型,Python允许使用常用的数据交换格式JSON
(Java Script Object Notation)。
标准模块json可以接受Python数据结构,并将它们转换为字符串表示形式,此过程称为序列化
。
从字符串表示形式重新构建数据结构称为反序列化
。
以下代码示意了json模块的使用方法。
-
Python语言提供的
pickle模块
实现了基本的数据序列和反序列化。通过pickle模块的序列化 *** 作能够将程序中运行的对象信息永久存储保存到文件中,并且能够从文件中恢复上一次程序保存的对象。
-
在pickle模块中主要提供了两个常用的方法方法,即
dump()
和load()
。dump()方法用于实现持久化数据对象,将其保存到文件中。
以学生成绩后台管理系统为例,系统中常常需要处理大量的数据,而这些数据通常以文件的形式存储在磁盘上。
实例需求是根据学生的成绩情况计算出其平均分和总分,然后将计算的结果再存储到磁盘文件中。
学生的基本信息存放在文件student.txt中,其数据存储格式如图8-1所示。
学生基本信息和最终计算出平均分以及总分都存储到student_score_result.txt中,如图8-2所示。
归一化处理
为消除不同特征之间量纲的影响,在数据处理时常常需要对数据做归一化处理,使得不同指标之间具有可比性。
在实际数据处理时,可能不知道每个特征的取值范围,在这里使用下面的公式对学生成绩归一化,使得结果映射到[0, 1]的范围内,实现对原始数据的等比放缩:
- 本章从Python的文件的对象开始,分别介绍了文件对象的属性和方法,以及如何使用os模块和 *** 作系统交互以进行文件和目录 *** 作等。
- 介绍了Python中文件数据的处理方法,包括按字节处理、通过文件迭代器处理数据、使用json存储结构化数据和使用序列化存储文件数据等。
- 通过两个综合案例,详细演示了较为复杂的数据处理和文件 *** 作流程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)