0
点赞
收藏
分享

微信扫一扫

Python基础10

JamFF 2022-02-07 阅读 50

Python基础10

学习10

文件操作(IO技术)

有基础的同学知道,很多软件系统是将数据存储的数据库中;数据库实际也是基于文件形式存储的,本章我们就学习文件的相关操作。

文本文件和二进制文件

1、文本文件
文本文件存储的是普通“字符”文本,默认为unicode字符集(两个字节表示一个字符,最多可以表示:65536个),可以使用记事本打开。但是,像word软件编辑的文档不是文本文件。
2、二进制文件
二进制文件把数据内容用“字节”进行存储,无法用记事本打开。必须使用专用的软件解码。常见的有:MP4 视频文件、MP3 音频文件、JPG 图片、doc文档等等。

文件操作相关模块概念

Python标准库中,文件操作相关模块:
在这里插入图片描述

创建文件对象open()

open()函数用于创建文件对象,基本语法格式如下:
open(文件名[,打开方式])

如果只是文件名,代表在当前目录下的文件。文件名可以录入全路径。
比如:D:\a\b.txt。
为了减少 “ \ ” 的输入,可以使用原始字符串:
r “d:\b.txt”。示例如下:
在这里插入图片描述
打开方式有如下几种:
在这里插入图片描述
文本文件对象和二进制文件对象的创建:
如果我们没有增加模式“b”,则默认创建的是文本文件对象,处理的基本单元是“字符”。如果是二进制模式“b”,则创建的是二进制文件对象,处理的基本单元是“字节”。

文本文件的写入

文本文件的写入一般就是三个步骤:
1、创建文件对象
2、写入数据
3、关闭文件对象(一定要有关闭功能)

例子:
在这里插入图片描述

常用编码介绍

在操作文本文件时,经常会操作中文,这时候就经常会碰到乱码问题。为了让大家有能力解决中文乱码问题,这里简单介绍一下各种编码之间的关系。
在这里插入图片描述
结果:写入之后是乱码
在这里插入图片描述
在这里插入图片描述
中文乱码问题:
Python程序默认的是unicode,windows 操作系统默认的编码是 GBK,Linux 操作系统默认的编码是 UTF-8。当我们用 open()时,调用的是操作系统打开的文件,默认的编码是 GBK。
解决方案1:
在这里插入图片描述
解决方案2:
在编码时就设置为“utf-8”
在这里插入图片描述

write()/writtelines()写入数据

write(a):把字符串 a 写入到文件中
writelines(b):把字符串列表写入文件中,不添加换行符
在这里插入图片描述
结果:
在这里插入图片描述

close()关闭文件流

由于文件底层是由操作系统控制,所以我们打开的文件对象必须显式调用 close()方法关闭文件对象。当调用 close()方法时,首先会把缓冲区数据写入文件(也可以直接调用 flush()方法),再关闭文件,释放文件对象。
在这里插入图片描述

为了确保打开的文件对象正常关闭,一般结合异常机制的 finally 或者 with 关键字实现无论何种情况都能关闭打开的文件对象。

结合异常机制finally确保关闭文件对象:
在这里插入图片描述
try中无异常,也会执行finally,当try中有异常,执行except之后,也会执行finally,这样都会执行close()方法。
在这里插入图片描述
with语句(上下文管理器)
with 关键字(上下文管理器)可以自动管理上下文资源,不论什么原因跳出 with 块,都能确保文件正确的关闭,并且可以在代码块执行完毕后自动还原进入该代码块时的现场
在这里插入图片描述

文本文件的读取

文件的读取一般使用如下三个方法:
1、 read([size])
从文件中读取 size 个字符([size]表示可选size,不填写也可以),并作为结果返回。如果没有 size 参数,则读取整个文件。读取到文件末尾,会返回空字符串。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
end="" 表示print打印输出后不用自动换行了,print()有自动换行的功能。

2、 readline()
读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。

3、readlines()
文本文件中,每一行作为一个字符串存入列表中,返回该列表。

例子:为文本文件每一行的末尾增加行号。
在这里插入图片描述
enumerate枚举每一个元素,并且添加序列,并以元组包含起来。
在这里插入图片描述
结果:
在这里插入图片描述

二进制文件的读取和写入

二进制文件的处理流程和文本文件流程一致。首先还是要创建文件对象,不过,我们需要指定二进制模式,从而创建出二进制文件对象。例如:
在这里插入图片描述
创建好二进制文件对象后,仍然可以使用 write()、read()实现文件的读写操作。
在这里插入图片描述

文件对象的常用属性和方法

文件对象封装了文件相关的操作。在前面我们学习了通过文件对象对文件进行读写操作。本节我们详细列出文件对象的常用属性和方法,并进行说明。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
例子:
读取的内容为:
在这里插入图片描述在这里插入图片描述
seek()的用法例子:
在这里插入图片描述

使用pickle序列化

序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。我们可以使用 pickle 模块中的函数,实现序列化和反序列操作。
序列化我们使用:

pickle.dump(obj, file)
obj 就是要被序列化的对象,file 指的是存储的文件

pickle.load(file)
从 file 读取数据,反序列化成对象
在这里插入图片描述
在这里插入图片描述

CSV文件的操作

csv(Comma Separated Values)是逗号分隔符文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出。

Excel文件不同,CSV文件中:
1、值没有类型,所有值都是字符串
2、不能指定字体颜色等样式
3、不能指定单元格的宽高,不能合并单元格
4、没有多个工作表
5、不能嵌入图像图表
在这里插入图片描述

csv.reader 对象和 csv 文件读取

在这里插入图片描述
执行结果:
[‘姓名’, ‘年龄’, ‘工作’, ‘薪水’]
[‘高淇’, ‘18’, ‘程序员’, ‘50000’]
[‘高老三’, ‘19’, ‘测试工程师’, ‘20000’]
[‘高老五’, ‘20’, ‘人工智能开发’, ‘50000’]

csv.writer 对象和 csv 文件写入

在这里插入图片描述
执行结果:
工号,姓名,年龄,地址,月薪
1001,高淇,18,西三旗 1 号院,50000
1002,高八,19,西三旗 1 号院,30000

在这里插入图片描述

os 和 os.path 模

os 模块可以帮助我们直接对操作系统进行操作。我们可以直接调用操作系统的可执行文件、命令,直接操作文件、目录等等。在系统运维的核心基础。

os 模块-调用操作系统命令

os.system 可以帮助我们直接调用系统的命令
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Linux 是命令行操作更容易,我们可以通过 os.system 可以更加容易的调用相关的命令。

注意:控制台输出中文可能会有乱码问题,可以在 file–>setting 中设置
(解决控制台乱码问题)
在这里插入图片描述
os.startfile:直接调用可执行文件
在这里插入图片描述
在这里插入图片描述

os 模块-文件和目录操作

我们可以通过前面讲的文件对象实现对于文件内容的读写操作。如果,还需要对文件和目录做其他操作,可以使用 os 和 os.path 模块。
在这里插入图片描述
在这里插入图片描述

os.path 模块

os.path 模块提供了目录相关(路径判断、路径切分、路径连接、文件夹遍历)的操作。
在这里插入图片描述
列表推导式:
在这里插入图片描述

walk()递归遍历所有文件和目录

在这里插入图片描述
【示例】使用 walk()递归遍历所有文件和目
在这里插入图片描述

shutil 模块(拷贝和压缩)

shutil 模块是 python 标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等;还可以做文件和文件夹的压缩、解压缩操作。

os 模块提供了对目录或文件的一般操作。shutil 模块作为补充,提供了移动、复制、压缩、解压等操作,这些 os 模块都没有提供。

【示例】实现文件的拷贝
在这里插入图片描述
【示例】实现递归的拷贝文件夹内容(使用 shutil 模块)
,ignore=shutil.ignore_patterns(".html",".htm")可以忽略不需要的文件。
在这里插入图片描述
在这里插入图片描述

【示例】实现将文件夹所有内容压缩(使用 shutil模块)
在这里插入图片描述
在这里插入图片描述
【示例】实现将压缩包解压缩到指定文件夹(使用 shutil 模块)
在这里插入图片描述

递归算法

递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是**“自己调用自己”**,一个使用递归技术的方法将会直接或者间接的调用自己。

利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快排等问题。

递归结构包括两个部分:
在这里插入图片描述
例子:使用递归求n!
在这里插入图片描述
在这里插入图片描述
递归的缺陷
在这里插入图片描述
例子:
在这里插入图片描述

举报

相关推荐

0 条评论