基于Python3版本的学习。
模块是最高级别的程序组织单元。
在模块中,我们不但可以直接存放变量,还能存放函数,还能存放类。
定义变量需要用赋值语句;
封装函数需要用def语句;
封装类需要用class语句;
封装模块不需要任何语句。
之所以不用任何语句,是因为每一份单独的Python代码文件(后缀名是.py的文件)就是一个单独的模块。
其实就是在主程序的py文件中,使用import语句 导入其他py文件。
我们使用import语句导入一个模块,最主要的目的并不是运行模块中的执行语句,而是为了利用模块中已经封装好的变量、函数、类。
# test.py
a = '我是模块中的变量a'
def hi():
a = '我是函数里的变量a'
print('函数“hi”已经运行!')
class Go2:
a = '我是类2中的变量a'
def do2(self):
print('函数“do2”已经运行!')
print(a) # 打印变量“a”
hi() # 调用函数“hi”
A = Go2() # 实例化“Go2”类
print(A.a) # 打印实例属性“a”
A.do2() # 调用实例方法“do2”
# main.py
import test # 导入test模块
print(test.a) # 使用“模块.变量”调用模块中的变量
test.hi() # 使用“模块.函数()”调用模块中的函数
A = test.Go2() # 使用“变量 = 模块.类()”实例化模块中的类
print(A.a) # 实例化后,不再需要“模块.”
A.do2() # 实例化后,不再需要“模块.”
运行结果:
我是模块中的变量a
函数“hi”已经运行!
我是类2中的变量a
函数“do2”已经运行!
import语句还有一种用法是import…as… 。
上面的案例中,main.py文件可以写成这样:
# main.py
import test as t # 导入test模块
print(t.a) # 使用“模块.变量”调用模块中的变量
t.hi() # 使用“模块.函数()”调用模块中的函数
A = t.Go2() # 使用“变量 = 模块.类()”实例化模块中的类
print(A.a) # 实例化后,不再需要“模块.”
A.do2() # 实例化后,不再需要“模块.”
当我们需要同时导入多个模块时,可以用逗号隔开。
比如import a,b,c可以同时导入“a.py,b.py,c.py”三个文件。
import a,b,c
from … import …语句可以让你从模块中导入一个指定的部分到当前模块。
格式如下:
from (模块名) import(指定模块中的变量名/函数名/类名)
1、导入模块中的指定部分(变量名/函数名/类名)
2、导入后的指定部分可以直接使用,无需加上“模块.”前缀
# 【文件:test.py】
def hi():
print('函数“hi”已经运行!')
# 【文件:main.py】
from test import hi # 从模块test中导入函数“hi”
hi() # 使用函数“hi”时无需加上“模块.”前缀
当我们需要从模块中同时导入多个指定内容,也可以用逗号隔开,写成from xx模块 import a,b,c的形式。
对于from … import …语句要注意的是,没有被写在import后面的内容,将不会被导入。
当我们有了一大堆py文件组成一个程序的时候,为了【指明】某个py文件是程序的运行入口,我们可以在该py文件中写出这样的代码:
# 【文件:xx.py】
代码块 ①……
if __name__ == '__main__':
代码块 ②……
当xx.py文件被直接运行时,代码块②将被运行。
当xx.py文件作为模块是被其他程序导入时,代码块②不被运行。
Python的系统内置模块 ,如time模块和random模块,Python安装后就准备好了这些模块供你使用。
如果是第三方编写的模块,我们需要先从Python的资源管理库下载安装相关的模块文件。
学习模块的核心是搞清楚模块的功能,也就是模块中的函数 和类方法 有什么作用,以及具体使用案例长什么样。
学会百度搜索模块教程,搜到教程后,我们重点关注的是模块中的函数和类方法有什么作用,然后把使用案例做成笔记。
例如random模块的关键知识(也就是比较有用的函数和类方法),可以做成这样的笔记:
import random # 调用random模块
a = random.random() # 随机从0-1之间抽取一个小数
print(a)
a = random.randint(0,100) # 随机从0-100之间抽取一个数字
print(a)
a = random.choice('abcdefg') # 随机从字符串/列表/字典等对象中抽取一个元素(可能会重复)
print(a)
a = random.sample('abcdefg', 3) # 随机从字符串/列表/字典等对象中抽取多个不重复的元素
print(a)
items = [1, 2, 3, 4, 5, 6] # “随机洗牌”,比如打乱列表
random.shuffle(items)
print(items)
我们还可以使用dir()函数 查看一个模块,看看它里面有什么变量、函数、类、类方法。
总结一下模块的学习方法,其实可以归纳成三个问题:
问题 | 解决方法 |
---|---|
这模块有哪些函数可用? | 可以通过dir()函数查询。 |
有哪些属性或方法可用? | 去网上看文档或找教程 |
使用格式是什么? | 从文档或教程中搜集案例 |
csv 是一种文件格式,你可以把它理解成“简易版excel”。学会了csv模块,你就可以用程序处理简单的电子表格了。
如果要手动新建csv文件,我们可以先新建一个excel表格,然后选择另存为“csv”格式即可。
同样的,当我们有了一张csv格式的表格,我们也可以选择另存为“excel”格式。
下面继续学习如何用csv模块读写csv文件。
我们使用import语句导入csv模块,然后用dir()函数看看它里面有什么东西。
同时,我们可以搜索到csv模块的官方
英文教程:https://docs.python.org/3.6/library/csv.html
中文教程:https://yiyibooks.cn/xx/python_352/library/csv.html#module-csv
读取CSV文件的最简单示例:
import csv
with open('some.csv', newline='') as f:
reader = csv.reader(f)
for row in reader:
print(row)
相应的最简单的写入示例是:
import csv
with open('some.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(someiterable)
由于open()用于打开要读取的CSV文件,因此默认情况下该文件将使用系统默认编码解码为unicode 。要使用不同的编码对文件进行解码,请使用open的encoding参数:
import csv
with open('some.csv', newline='', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
print(row)
注册新方言:
import csv
csv.register_dialect('unixpwd', delimiter=':', quoting=csv.QUOTE_NONE)
with open('passwd', newline='') as f:
reader = csv.reader(f, 'unixpwd')
稍微更高级的使用读者 - 捕获和报告错误:
import csv, sys
filename = 'some.csv'
with open(filename, newline='') as f:
reader = csv.reader(f)
try:
for row in reader:
print(row)
except csv.Error as e:
sys.exit('file {}, line {}: {}'.format(filename, reader.line_num, e))