Python基础语法26:模块导入与文件读写

Python基础语法26:模块导入与文件读写收录于话题#python基础语法这是安迪的第26篇原创。本文8357字,36张图,累计46380字,469张图。1. 课前复习首先回顾一下列表、循环以及函数

Python基础语法26:导入模块和读写文件

包含在主题中

#python基本语法

这是Andy的第26篇原创文章。本文共包含8,357 字和36 张照片,总计46,380 字和469 张照片。

1.课前复习

首先,检查您对列表、循环和函数调用的了解。

假设我们有一个字典“animal_info”和一个列表“animal_list”。保存的数据为:

1) Animal_info={‘哺乳动物’: ‘老虎’, ‘鱼’: ‘鲑鱼’, ‘家禽’: ‘鸡’}

2) 动物列表=[‘爬行动物’]

现在,从字典“animal_info”中提取“key”并将其添加到列表“animal_list”中。

代码第6行使用for循环遍历字典并检索字典中animal_info的每个键。第8行使用列表的append()方法将检索到的键添加到列表animal_list中。

然后还有更多的字典信息需要处理。所以我将“获取密钥并将其添加到列表”的功能打包到一个函数中。

下面调用函数animal_add()。

将字典animal_info1和animal_info2的键添加到按顺序列出animal_list。

2. 今天我们要学什么?

小袁是Flash小学的辅导老师,他刚刚结束期中考试,需要统计三个班级的成绩单。

这个操作并不难,但是非常繁琐。肖媛老师几乎每次考试结束后都要将各班的成绩单复制粘贴到成绩单上,浪费了很多时间。

那么,Python能否为肖远老师解决这个重复性的任务呢?

答案是肯定的。今天我们就来学习如何使用Python读写文件来帮助小袁老师解决这个问题。

首先我会让学生体验一下我写的代码,然后我会讲解代码中出现的新知识。

【实际操作】

按照我的方法,创建对应的文件夹:(可以自己添加分数)

1) 单击蓝色文件夹图标。

2) 单击展开“Work”文件夹,然后单击“Class Results”文件夹以查看每个文件的内容。

3)检查每个文件的内容后,根据代码编写该段落并[运行]。

如果运行成功,请检查[Work] 文件夹中的[Total Grade Transcript.csv] 文件的内容。

这段代码主要实现了以下功能:

1) 加载每个班级的[Transcript.csv]文件数据。

2) 将读取的数据写入“综合成绩报告卡.csv”文件中。

有了这段代码,小袁只需点击“运行”按钮就可以立即总结下一次考试的成绩单,节省了大量的复制粘贴时间。

我们都知道Excel主要由三个基本结构组成:工作簿、工作表和单元格,如下图所示。

Excel 还允许您实现许多功能,例如文本设置和对齐方式。 Excel表格功能丰富,展示的表格样式也比较美观,但也是有代价的。例如Excel占用存储空间大,读写时间长。

如果你没有表格样式要求,你可以使用CSV文件来存储你的数据,与Excel相比,它的读写速度要快得多。

3.csv文件

csv 是“逗号分隔值”的缩写。 [逗号分隔值]是什么意思?

让我们打开一个随机的csv 文件并查看其内容。

可以看到,文件中的数据是纯文本格式,不同行的值(数据)之间用逗号分隔。

csv也可以在Excel软件中打开,数据以电子表格格式显示,因此也被认为是电子表格的简化版。

CSV 是纯文本文件,通常由值(数据)和逗号组成。它不包括文本格式、单元格样式等。与Excel 文件相比,它们存储的信息更少且加载速度更快。

如果要读写csv文件,还需要使用csv模块的“威力”。

4. 模块和库

在讲模块之前,我们先了解一下库的相关概念。

如果把Python比作手机,库就像手机上的软件(app),可以实现各种功能。

一般有两种类型的图书馆。

一种叫做标准库,它是Python自带的库,可以像手机的相机、照片、计算器等内置软件一样直接使用。

另一种是第三方库,比如微信、抖音等从手机应用商店下载的软件,必须下载安装后才能使用。

因此,如果使用Python第三方库,必须确保已下载并安装。

那么什么是模块呢?它与库有什么关系?

简单来说,模块就是一个包含代码并包含完整功能的Python文件。

每次运行代码时,基本上都是在运行一个名为main.py 的程序文件(模块)。

用相机应用库来比喻,相机就是解决摄影问题的软件,模块类似于相机内部的闪光灯、对焦、相册等小功能。

模块是实现特定类型功能的单个Python文件,而库是可以实现更复杂功能的多个功能模块的集合。

csv模块是Python标准库中的内置模块,用于处理csv文件。不需要安装,直接使用即可。

你到底如何使用它?

csv 模块包含多个变量、函数和类。然后调用csv模块中的特定函数或类来读取和写入csv文件。

在此之前,我们需要导入该模块。其导入代码为:

导入CSV

从代码中可以看到,模块导入语法为:import + 模块名称(import: input, import)。请注意导入和模块名称之间的空格。

只有导入模块后才能使用模块内的某些功能。

在模块内调用类、函数或变量的语法是:

1)调用模块下的类:modulename.classname()(如csv.DictReader())。

2)调用模块下的函数:modulename.functionname()(如os.listdir())。

3)调用模块下的变量:模块名.变量名(如os.SEEK_SET)。

接下来,我们将调用Python的另一个内置模块os,并演示如何使用该模块。

os模块提供了几个与系统操作相关的功能。模块中的listdir()函数用于返回指定文件夹中的文件或文件夹名称列表。

例如,您可以读取“每节课的结果”文件夹中的所有文件名。

#导入操作系统模块。 os模块提供了几个与系统操作相关的功能。

导入操作系统

#设置文件夹路径

#模块的listdir()函数返回指定文件夹中的文件或文件夹名称列表。

file_name=os.listdir(‘./work/每个班级的成绩’)

打印(文件名)

当您运行上面的代码时,您将看到“Grades of Each Class”文件夹中的所有文件名都被打印到终端。

首先,使用import 导入操作系统模块。

接下来,使用modulename.functionname() 调用操作系统模块的listdir() 函数,并将结果分配给file_name 变量。

该函数中[]中的“./work/grades for every class”是[grades for every class]文件夹的路径,用于指定该文件夹的位置。 (路径在open() 函数部分详细解释)

要调用模块下的函数/类/变量,还可以使用不同的语法,编写:from 模块名import 类名/函数名/变量名。

#“从操作系统模块导入listdir()函数”。

从操作系统导入列表目录

file_name=listdir(‘./work/每个班级的成绩’)

打印(文件名)

from os import listdir 意思是“从os 模块导入listdir() 函数”。

然后可以直接使用listdir()函数,例如listdir(‘./work/grades of every class’)。不需要写os.listdir(‘./work/grades of every class’)。 )。

在模块内调用类也是如此;模块内的调用语法是模块名.类名()。

使用哪种语法取决于您的实际需要。

现在我们已经解释了模块相关的知识,我们用思维导图来总结一下。

我使用import csv 导入了csv 模块,但是如何读取和写入该文件?

与经典示例“将大象放入冰箱需要三个步骤”相同。使用Python读写csv文件内容也分为三个步骤:打开-读/写-关闭。

首先您需要打开该文件。要打开文件,必须使用Python 的内置函数open()。

5.open()函数

open():打开文件并返回文件对象。

调用open() 函数:f=open(file,mode,encoding)。

5.1 参数文件

参数file代表需要打开的文件的路径。

路径:对象的地址。

就像在现实世界中一样,当寻找一个人或建筑物时,您需要通过地址找到它。例如,东方明珠电视塔的地址是上海市浦东新区世纪大道1号。

在您的计算机上,文件是通过文件路径定位的。在Python 中,路径可以表示为字符串。

路径有两种写法:绝对路径和相对路径。

绝对路径:完整路径始终以根目录开头,以特定文件或文件夹名称结尾。

绝对路径以磁盘名称开头,例如C: 或D:在Mac 系统上,绝对路径以“/”开头。

让我们举个例子:

在Windows系统中,C盘根目录下有一个名为[codes]的文件夹。该文件夹是Python基础语法26:模块导入与文件读写

有一个[Work]文件夹和一个[main.py]文件,[Work]文件夹中包含csv文件[Total Grade Transcript.csv]。

使用绝对路径来表示多个文件夹和文件的地址。可以写成:

# [Work]文件夹的绝对路径

‘C:/代码/工作/’

# [main.py]文件的绝对路径

“C:/代码/main.py”

# 文件[总成绩成绩单.csv] 的绝对路径

‘C:/codes/work/总成绩单.csv’

“相对路径”是指引用对象“当前目录”,描述文件路径的格式。

假设家住上海浦东新区的马先生想去珍珠塔。

如果“马老师”想去“珍珠塔”,只需要向司机解释目的地是“第一世纪大道”,不需要加上“上海浦东新区”。这样司机就会明白她的意思。

相对路径使用两个特殊字符:一个点(.) 和一个双点(.)。

点(.) 表示文件或文件夹所在的当前目录。

双点(.) 表示当前目录之上的目录。

回到前面的例子,当你打开[main.py]文件时,当前目录是[codes]文件夹。

由于[work]文件夹和[main.py]文件都在[codes]文件夹中,因此[work]文件夹和[main.py]文件之间的相对路径可以表示为:

# [Work]文件夹的相对路径

‘。 /工作/’

# [main.py]文件的相对路径

‘./main.py’

Total Grade Transcript.csv 文件位于Work 文件夹中,因此csv 文件的相对路径为:

# 文件[总成绩单.csv]的相对路径

‘./work/总成绩单.csv’

当您打开“Total Grade Transcript.csv”文件时,当前目录将是“Work”文件夹。

[work]文件夹的上层目录是[codes]文件夹。此时,[main.py]文件的相对路径如下。

# [main.py]文件的相对路径

‘./main.py’

要知道文件的相对路径,首先需要确定文件的当前目录。

该图总结了:

5.2 参数模式

参数mode:文件打开方式。

最重要的模式是只读(r)、写入(w) 和附加(a)。

下表显示了模式部分可以指定的值。

【温馨提示】表格后三行的“r+”、“w+”、“a+”无需记忆。只要理解就足够了。如果您遇到问题,您可以根据您的具体问题选择使用以下模式:

1) 参数mode默认值为“r”。如果不设置参数mode,则默认以只读模式打开文件。

2) 如果mode=’w’(写入模式),则open()函数打开文件仅用于写入。如果文件已存在,请打开它并从头开始编辑。也就是说,原始内容保持不变。清除。如果该文件不存在,则创建一个新文件。

3)如果mode=’a’,即追加模式,则open()函数打开文件并追加写入的内容。如果文件已经存在,则新内容将写入现有内容之后。如果该文件不存在,则创建一个新文件进行写入。

读取文件时必须使用mode=’r’。这意味着以只读模式打开文件。如果要写入文件,则必须使用mode=’w’ 或mode=’a’ 打开文件。

5.3 参数编码

编码参数代表文件的编码方式。课程中使用的文件编码通常是“utf-8”。

为了避免程序错误,读取内容出现乱码,需要将编码设置为“utf-8”,即写入encoding=’utf-8’。

6. 加载文件

6.1 DictReader()类

我们以[Class 1 Transcript.csv] 文件的内容为例。

通过以下代码读取文件内容。

在读取文件内容的步骤中,第8行出现了一个以前没见过的知识点。这是csv 模块中的DictReader() 类。

DictReader() 类:读取字典格式的csv 文件。

当你实例化DictReader() 时,你会得到一个DictReader 对象。

类DictReader() 的实例化语法是DictReader(f)。

参数f是一个csv文件对象。

第6行使用open()函数打开csv文件后,函数返回一个文件对象,并将返回的文件对象赋值给变量source_path。

第8行将文件对象source_path传递给DictReader()的参数f,完成DictReader()类的实例化。

实例化的DictReader 对象是一个可迭代对象。第10-11 行允许我们使用for 循环迭代每个元素。

下图是终端显示的结果。

正如您所看到的,终端显示了几个词典。这是因为DictReader() 类以字典的形式读取csv 文件。

所以每次迭代for循环时都可以得到字典。

其中,字典的键代表文件中的标题,字典的值代表文件每一行的单元格数据。

DictReader 对象有一个fieldnames 属性,允许您读取文件的标题。

如您所见,终端打印文件中的标题[‘Name’, ‘Grade’]。

读取文件内容后,需要关闭该文件。

必须关闭所有打开的文件对象。

您必须使用open() 打开文件,最后使用方法file object.close() 关闭打开的文件。

因此,在代码末尾,使用file_csv.close() 关闭文件对象。

然而,有时人们会变得粗心。不使用这种方法不仅是不好的编程习惯,而且还可能导致一些异常。

为了防止由于忘记写close()而导致程序出现意外的异常,我们将引入一种在open()中不写file object.close()的情况下自动打开文件的方法:

6.2 打开().

with open() as . 是对原来的open() 和close() 的优化。

使用with open() as . 语句后,下面代码块末尾会自动执行close() 来关闭文件。

使用时,将open() 函数放在with 后面,将变量名放在as 后面,最后添加一个冒号:并将要使用open()as 执行的文件处理语句缩进到下面的代码块中。中间。

具体语法见下图。

需要强调的是,传统的做法是将open()返回的文件对象赋值给一个形式为variable=open()的变量。

但是,使用open() as. 时,不要使用变量=形式,而是将变量直接放在as 后面,如下图所示。

记得缩进。打开文件后的任何其他文件操作都应放置在with 下的缩进代码块中。

7. 文件写入

假设您在[Work]文件夹中新建一个[学生体检表.csv]文件,并将以下两个词典的内容写入该文件。

1) dict1={‘姓名’:’王大帅’,’身高’:’176′};

2)dict2={‘姓名’:’徐美丽’,’身高’:’177′}。

运行代码之前:在Work 文件夹下,只有Grade Scores for Each Class 文件夹和Total Grade Transcript.csv 文件。

接下来,我们将解释每行代码的作用,然后解释Student Health Report.csv 文件是如何生成的。

第1 行和第2 行导入csv 模块。

第4至12行设置“学生健康检查报告.csv”文件的生成路径,以及文件头和内容(即要写入的词典)。

第14至25行实现写入文件头和内容。

实现读取文件内容的步骤是csv 模块中的另一个类发挥作用的地方:DictWriter()。

7.1 DictWriter()类

DictWriter() 类支持将数据以字典格式写入CSV 文件。

当你实例化DictWriter() 时,你会得到一个DictWriter 对象。

类DictWriter() 的实例化语法是DictWriter(f, fieldnames)。在:

1)参数f是一个csv文件对象。

2)参数fieldnames的作用是定义文件头,文件头的数据可以是列表的形式。

要将内容写入文件,您必须打开该文件。

第15 行,open() 函数打开csv 文件并返回文件对象f。

这里的open()函数的参数模式采用write(w)模式。

如果mode=’w’(写入模式),则open() 函数打开文件仅用于写入。

如果文件已存在,请打开它并从头开始编辑。也就是说,原来的内容将被删除。如果该文件不存在,则创建一个新文件。

这也解释了学生体检表.csv 文件的生成位置和方式。

文件打开后,您可以对其进行写入。

代码的第9 行将列表的开头设置为Student Physical Inspection Form.csv 文件的标题。

然后,在第18 行,文件对象f 和列表的开头分别传递给DictWriter() 类的参数f 和字段名称。

实例化的DictWriter 对象可以使用writeheader() 方法实例化。

第20-21行将表头(列表头)写入[学生健康证书.csv]文件。

第24-25行使用writerow(rowdict)方法,方法中的参数rowdict可以传递给字典。

此方法允许您将字典dict1 和dict2 中的数据按顺序写入[Student Health Certificate.csv] 文件,每行一个字典。

写入字典时,字典的键将与文件中的标头进行匹配。

如果匹配成功,就会将key对应的value写入对应的header下。

但是,如果您要编写大量字典,则使用writerow() 方法将它们写入文件的代码可能会变得很长。

因此,您可以使用DictWriter 对象的另一个方法:writerows(rowdicts)。此方法允许您一次写入多行。

方法中的参数rowdicts可以是嵌套字典列表的形式。

使用writerows() 方法而不是writerow()。

#将多行内容写入文件

dict_write.writerrows([dict1, dict2])

代码通过[] 将两个字典放入一个列表中,并将它们传递给writerrows() 方法。无需将多个字典传递给多个writerow() 方法。

我们还学习了如何编写文件的内容,所以让我们使用思维导图回顾一下它。

至此,我们已经了解了如何打开、读取、写入和关闭文件。

这里,我们将结合这些函数来实现读取一个文件的内容并将内容写入另一个文件的能力。

8. 读写文件

我知道文件[class 3transcript.csv]的相对路径是./work/grades for every class/class 3transcript.csv并且文件编码是“utf-8”。

[Transcript.csv] 文件相对路径为./work/Transcript.csv,文件编码为“utf-8”。

接下来,您需要读取Class 3 Transcript.csv 文件的内容并将其写入Total Grade Transcript.csv 文件。

第1 行和第2 行导入csv 模块。

第4 行到第8 行设置[Class 3 Transcript.csv] 和[Total Transcript.csv] 文件的路径。

第10 行和第11 行设置了一个空列表。

设置这个空列表的原因是:

DictReader() 类读取字典格式的[Class 3 Transcript.csv] 文件。实例化该类得到的DictReader对象,通过for循环,得到多个字典。

此外,通过实例化类DictWriter() 获得的DictWriter 对象使用writerrows() 方法。此方法可以传递来自嵌套列表字典的数据。

所以我们设置一个空列表行。

接下来,第13 至26 行读取[Class 3 Transcript.csv] 文件的内容,并将内容(即字典)添加到列表行。

在这里,在第20 行,我们可以使用DictReader 对象的fieldnames 属性来读取文件的标头。将表头分配给变量头。

最后,第28 至38 行将表标题和列表行的内容写入Total Grade Transcript.csv 文件。

九、总结与拓展

本课主要讲解读写文件等一些步骤的知识。

下面列出了重要的知识点。

1)加载文件

a. csv模块:读取和写入csv格式的表单数据。

b. open() 函数:用于打开文件并返回文件对象。

c. 使用open() as .打开一个自动关闭的文件。

d. DictReader() 类:读取字典格式的csv 文件。

2)文件写入

a. DictWriter() 类:支持以字典格式写入CSV 文件。

b. writeheader() 方法:将标头写入CSV 文件。

c. writerow() 方法:一次将一行内容写入CSV 文件。

d. writerows() 方法:将内容写入CSV 文件,一次写入多行。

思维导图:

【扩展练习】:批量读写csv文件。

os 块下的listdir() 函数可以返回指定文件夹中包含的文件或文件夹名称列表。

下面的代码将获取[Results for every class] 文件夹中所有csv 文件名的列表。

然后我们通过for循环遍历列表并获取多个csv文件的名称。然后加入即可获取对应文件的路径。

下面是前面介绍的读写文件的代码。

结尾

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
游戏资讯

Python基础语法9-12:条件判断

2024-5-10 10:51:26

游戏资讯

Python 高效办公11 第三方库 openpyxl 的安装

2024-5-10 11:11:54

个人中心
购物车
优惠劵
有新私信 私信列表
搜索