news 2026/4/16 15:07:10

Python语言编程导论第八章 文件处理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python语言编程导论第八章 文件处理

内容提要

概述

文件的常见操作

目录的常见操作

一、概述

数据的存储可以使用数据库,也可以使用文件。

数据库保持了数据的完整性和关联性,且使用数据更安全、可靠。使用文件存储数据则非常简单、易用,不必安装数据库管理系统等运行环境。

文件通常用于存储应用软件的参数或临时性数据,是一个命名的比特集合,存储在硬盘、U盘、闪存条等辅助存储设备中。

文件分为两类:文本文件和二进制文件。 Python提供了os、os.path、shutil等模块处理文件。

文本文件的特点:

基本是字符串。

Python源代码文件和HTML文件等都属于文本文件。 可使用任何文本编辑器进行编辑,对人来说相对容易阅读和修改。 对程序来说,无法直接阅读文本文件。

通常,每种文本文件都需要使用相应的分析程序来阅读,例如,Python使用专用分析程序来帮助阅读.py文件,而要阅读HTML文件,需要使用专用于HTML的分析程序。

通常比等价的二进制文件大。需要通过网络发送大型文本文件时,一般要进行压缩(如压缩成zip格式),以提高传输速度和节省磁盘空间。

二进制文件的特点:

通常是人无法直接阅读的,且使用常规的文本编辑器无法查看。

在文本编辑器中打开二进制文件时,显示的是一堆乱码。有些类型的二进制文件(如JPEG图像)需要使用特殊查看器显示其内容。 占据的空间通常比等价的文本文件小。

对程序来说,可以直接阅读二进制文件。虽然二进制文件各不相同,但通常无需编写复杂的分析程序来读取它们。

通常与特定程序相关联,若没有该程序,通常无法使用它们。有些流行的二进制文件的格式是公开的,如果愿意,可以自己编写读写它们的程序,但通常需要花费很大的功夫。

二、文件的常见操作

文件的常见操作包括: 打开文件 读写文件 复制文件 删除文件

1、文件的创建

文件的打开或创建可以使用函数open。

该函数可以指定处理模式,设置打开的文件为只读、只写或可读写状态。

格式: open(file, [mode[, buffering]])—>file object

说明:

参数file是被打开的文件名。若文件file不存在,open()将创建该文件,然后再打开该文件。

参数mode是指文件的打开模式。打开模式如表8-1。

参数buffering设置缓存模式。0表示无缓冲;1表示行缓冲;如果大于1则表示缓冲区的大小,,-1(或者任何负数)代表使用默认的缓冲区大小。以字节为单位。 open()返回1个file对象,file对象可以对文件进行各种操作。

表8-1:文件的打开模式

关于file类:

file类用于文件管理,可以对文件进行创建、打开、读写、关闭等操作。

文件的处理一般分为三个步骤:

创建并打开文件,使用open()函数返回1个file对象。

调用file对象的read()、write()等方法处理文件。

调用close()关闭文件,释放file对象占用的资源。

表8-2:file类的常用属性和方法

例8-1:文件的创建、写入和关闭

例8-2:在文件尾添加内容

2、文件的读取

文件的读取有多种方法,可以使用readline()、readlines()或read()函数读取文件。

(1)按行读取方式readline() readline()每次读取文件中的一行,需要使用永真表达式循环读取文件。

但当文件指针移动到文件的末尾时,依然使用readline()读取文件将出现错误。

因此程序中需要添加1个判断语句,判断文件指针是否移动到文件的尾部,并且通过该语句中断循环。

例8-3:使用readline()读文件

(2)多行读取方式

函数readlines()可一次性读取文件中多行数据。

使用readlines()读取文件,需要通过循环访问readlines()返回的内容。

例8-4:使用readlines()读文件

(3)一次性读取方式

读取文件最简单的方法是使用read(),read()将从文件中一次性读出所有的内容,并赋值给1个字符串变量。

例8-5:使用read()读文件

例8-6:使用read()返回指定字节的内容

3、文件的写入

文件的写入同样有多种方法,可以使用write()、writelines()方法写入文件。

例8-1使用write()方法将字符串写入文件,而writelines()方法可将列表中存储的字符串序列写入文件。

例8-7:使用writelines()写文件

将字符串插入到文件开头:

相比在文件末尾添加字符串,将字符串写入文件开头不那么容易,因为操作系统没有提供这样的支持。

解决的方法是:将文件读取到一个字符串中,将新文本插入到该字符串,再将这个字符串写入原来的文件。

例8-8:将字符串插入到文件开头

4、文件的删除

删除文件需要使用os模块和os.path模块。 os模块提供了对系统环境、文件、目录等操作系统级的接口函数。

表8-3列出了os模块常用的文件处理函数。 注意:os模块的open()函数与内置的open()函数的用法不同。

表8-3:os模块常用的文件处理函数

表8-4:os.path模块常用函数

例8-9:文件的删除

5、文件的复制

file类并没有提供直接复制文件的方法,但可以使用read()、write()方法来实现复制文件的功能。

例8-10:用read()、write()实现文件复制

复制文件的其他方法:

shutil模块是另一个文件、目录的管理接口,提供了一些用于复制文件、目录的函数。

其中,copyfile()函数可以实现文件的复制,move()函数可以实现文件的剪切。

copyfile(src, dst) 其中,参数src表示源文件的路径,dst表示目标文件的路径,均为字符串类型。

Move(src, dst, *, follow_symlinks=True)

例8-11:使用shutil模块实现文件的复制和移动

6、文件的重命名

os模块的函数rename()可以对文件或目录进行重命名。

在实际应用中,经常需要将某一类文件修改为另一种类型,即修改文件的后缀名。

可以通过函数rename()和字符串查找函数来实现。

例8-12:修改文件名

例8-13:修改后缀名

7、文件内容的搜索和替换

文件内容的搜索和替换可以使用字符串查找和替换来实现。

例8-14:从hello.txt文件中统计字符串’hello’出现的次数。

程序及执行结果:

例8-15:将hello.txt中的字符串’hello’全部替换为’hi’,并将结果存入hello2.txt中

8、处理二进制文件

Python中,通常使用pickle模块处理二进制文件。

可以使用pickle.dump将数据结构存储到磁盘,之后再用pickle.load从磁盘获取数据结构。

pickle不能用于读写特殊格式的二进制文件,如GIF文件。对这种格式的文件,必须逐字节处理。

例8-16:二进制文件存取

三、目录的常见操作

Python的os模块和os.path模块还提供了一些针对目录操作的函数。

1、创建目录和删除目录 os模块提供的常用目录处理函数见表8-4。

表8-4:os模块常用目录处理函数

例:目录的创建和删除

2、目录的遍历

例8-18:使用os.walk()遍历目录

3、其他目录相关操作

对目录的常见操作还有: 返回当前目录中的文件和文件夹; 返回当前目录中的指定类型文件;

返回当前目录中所有文件的大小总和等。

例8-19:返回当前目录中的文件和文件夹

例8-20:返回当前目录或指定目录中的.py文件

例8-21:返回当前目录中所有文件的大小总和

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 15:06:22

力扣题目1创作思路

一.题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。…

作者头像 李华
网站建设 2026/4/15 1:42:53

向 VictoriaMetrics 写入过去或未来时间戳指标的测试

公司使用推模式上传指标,有必要对“乱序问题进行”测试: 1. 使用推模式写入过去数据:只要在“保留周期”内即可写入成功,能够读取;(写入1个月前的指标,保留周期41天) 2. 使用推模式…

作者头像 李华
网站建设 2026/4/16 11:06:41

基于深度学习的水果检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)

视频演示 基于深度学习的水果检测系统1. 前言​ 随着计算机视觉技术的快速发展,基于深度学习的目标检测方法在农业、食品工业及日常生活中的应用不断拓展。水果检测作为其中的重要场景,不仅能为采摘、分拣、销售等环节提供自动化支持,也在智…

作者头像 李华
网站建设 2026/4/9 21:32:33

Android-Camera-为啥不移到packages/module

Camera 为何没有完全迁移到 packages/modules Camera 和 Audio 类似,是 Android 系统中最复杂、最集成的子系统之一,其未完全模块化的原因更为深刻。 一、Camera 系统的现状分布 当前架构层次 1. 应用层 (packages/apps/Camera2/) 2. 框架层 (frameworks…

作者头像 李华
网站建设 2026/4/13 3:57:44

鸿蒙HarmonyOS多线程编程实战:AI语音

在智能终端设备日益普及的今天,AI 语音应用——如语音助手、实时转写、声纹识别等——已成为用户交互的重要入口。然而,这类应用对响应速度、流畅性和系统资源调度提出了极高要求。若处理不当,极易出现卡顿、延迟甚至崩溃,严重影响…

作者头像 李华