一、模块的定义
- 函数
- 类,比函数强大,封装了属性和方法,可以实现更多的功能
- 模块,比函数、类还要更加强大,封装了更多的功能代码。模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便重用。也就是模块可以封装任何数据、代码。
- 每一个后缀名为.py的文件都是模块。
- 模块作用就是将数据、代码封装起来,以便再使用。模块不仅仅我们自己使用,也可以把它给别人使用,就像传递文件一样那么简单。
二、使用自己的模块
- 建立模块,就是建立.py文件。在其中一个.py文件中引入另一个.py文件。
1、import语句
- import语句可以导入一个模块,可以使用模块中的变量、函数与类。
# 建立mytest模块
strtest = '疫情凶猛'
def doctor():
intro = '这次疫情胜过非典,要注意安全'
print('尽量不要出门')
class Hospital:
strClass = '现在都没有口罩'
def buy(self):
print('赶紧想办法,去买口罩吧!')
#在main.py中导入mytest模块
import mytest # 导入mytest模块
print(mytest.strtest) # 打印mytest模块中的strtest
mytest.doctor() # 运行mytest模块中的函数doctor()
yisheng = mytest.Hospital() # mytest模块中的Hospital实例化
print(yisheng.strClass) # 打印实例属性
yisheng.buy() # 调用实例buy方法
# 输出结果:
疫情凶猛
尽量不要出门
现在都没有口罩
赶紧想办法,去买口罩吧!
- 还有另外一种方法,import…as…
import mytest as mt # 导入mytest模块
print(mt.strtest) # 打印mytest模块中的strtest
mt.doctor() # 运行mytest模块中的函数doctor()
yisheng = mt.Hospital() # mytest模块中的Hospital实例化
print(yisheng.strClass) # 打印实例属性
yisheng.buy() # 调用实例buy方法
# 输出结果:
疫情凶猛
尽量不要出门
现在都没有口罩
赶紧想办法,去买口罩吧!
- 如果你嫌mytest名字太长,就可以使用import…as…语句,可以将mytest的名字变成ts,这样在后面需要使用mytest模块名的地方,就可以换成ts名字使用。
- 当我们需要导入多个模块时,我们可以使用逗号,将模块名隔开。
2、from…import…语句
- 可以将某一模块的部分代码导入到另一个模块中。
from mytest import doctor
from mytest import Hospital
from mytest import strtest
print(strtest)
doctor()
print(Hospital.strClass)
# 输出结果:
疫情凶猛
尽量不要出门
现在都没有口罩
- 将mytest.py文件中的变量与函数引导main.py中使用,这样使用时无需加入”模块名”前缀。
- 也可以做如下改变:
from mytest import strtest,doctor,Hospital
print(strtest)
doctor()
print(Hospital.strClass)
# 输出结果:
疫情凶猛
尽量不要出门
现在都没有口罩
3、if __name__==’__main__'语句
- 当我们有很多py文件在一个程序中,但是你只能指定一个程序入口。这样你就需要使用if __name__ == ‘__main__’:来指定某个py文件为程序入口。
- 第一种情况:当main.py被直接运行时,if __name__==’__main__'后面的代码也会被运行
import mytest
if __name__=='__main__':
print(mytest.strtest)
mytest.doctor()
yisheng = mytest.Hospital()
print(yisheng.strClass)
yisheng.buy()
# 输出结果:
疫情凶猛
尽量不要出门
现在都没有口罩
赶紧想办法,去买口罩吧!
- 第二种情况,当main.py文件作为模块被其他程序导入时,只会执行if __name__==’__main__'前的代码,其后的代码将不会被执行
# 将main.py作为模块导入其他文件中,直接运行
# 以下为main.py文件内容:
import mytest
print('我是测试模块')
if __name__=='__main__':
print(mytest.strtest)
mytest.doctor()
yisheng = mytest.Hospital()
print(yisheng.strClass)
yisheng.buy()
# 以下为practice.py文件内容:
import main
# 输出结果为:
我是测试模块
- 总结一下:
三、使用他人的模块
1、time模块
Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。
Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。
时间间隔是以秒为单位的浮点小数。
每个时间戳都以自从 1970 年 1 月 1 日午夜(历元)经过了多长时间来表示。
- Python 的 time 模块下有很多函数可以转换常见日期格式。如函数 time.time() 用于获取当前时间戳, 如下实例:
import time
ticks = time.time()
print('当前时间戳为:'+str(ticks))
# 输出结果为:
当前时间戳为:1581313453.705747
时间戳单位最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,UNIX和Windows只支持到2038年。
(1)时间元组
很多Python函数用一个元组装起来的9组数字处理时间:
上述也就是struct_time元组。这种结构具有如下属性:
(2)获取当前时间
从返回浮点数的时间戳方式向时间元组转换,只要将浮点数传递给如localtime之类的函数。
import time
import time
localtime = time.localtime(time.time())
print('本地时间为:'+str(localtime))
# 输出结果:
本地时间为:time.struct_time(tm_year=2020, tm_mon=2, tm_mday=10, tm_hour=14, tm_min=13, tm_sec=12, tm_wday=0, tm_yday=41, tm_isdst=0)
(3)获取格式化时间
可以根据需求选取各种格式,但是最简单的获取可读的时间模式的函数是asctime():
import time
localtime = time.asctime(time.localtime(time.time()))
print('本地时间为:'+str(localtime))
# 输出结果:
本地时间为:Mon Feb 10 14:17:42 2020
(4)获取格式化日期
可以使用 time 模块的 strftime 方法来格式化日期:time.strftime(format[,t])
import time
import time
# 格式化成2016-03-20 11:45:39形式
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))
# 格式化成Mon Feb 10 14:28:23 2020形式
print(time.strftime('%a %b %d %H:%M:%S %Y',time.localtime()))
# 将格式字符串转换为时间戳
num = 'Mon Feb 10 14:28:23 2020'
print(time.mktime(time.strptime(num,'%a %b %d %H:%M:%S %Y')))
a = '2020-02-10 14:31:47'
print(time.mktime(time.strptime(a,'%Y-%m-%d %H:%M:%S')))
# 输出结果为:
2020-02-10 14:33:04
Mon Feb 10 14:33:04 2020
1581316103.0
1581316307.0
python中时间日期格式化符号:
- %y 两位数的年份表示(00-99)
- %Y 四位数的年份表示(000-9999)
- %m 月份(01-12)
- %d 月内中的一天(0-31)
- %H 24小时制小时数(0-23)
- %I 12小时制小时数(01-12)
- %M 分钟数(00=59)
- %S 秒(00-59)
- %a 本地简化星期名称
- %A 本地完整星期名称
- %b 本地简化的月份名称
- %B 本地完整的月份名称
- %c 本地相应的日期表示和时间表示
- %j 年内的一天(001-366)
- %p 本地A.M.或P.M.的等价符
- %U 一年中的星期数(00-53)星期天为星期的开始
- %w 星期(0-6),星期天为星期的开始
- %W 一年中的星期数(00-53)星期一为星期的开始
- %x 本地相应的日期表示
- %X 本地相应的时间表示
- %Z 当前时区的名称
- %% %号本身
import time; # 引入time模块
ticks = time.time() # 时间戳 每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。
print("当前时间戳为:", ticks)
localtime = time.localtime(time.time()) # 本地时间 从返回浮点数的时间戳方式向时间元组转换,只要将浮点数传递给如localtime之类的函数。
print("本地时间为 :", localtime)
localtime = time.asctime(time.localtime(time.time())) # 根据需求选取时间格式
print("本地时间为 :", localtime)
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # 格式化成2016-03-20 11:45:39形式
print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())) # 格式化成Sat Mar 28 22:24:24 2016形式
a = "Sat Mar 28 22:24:24 2016"
print(time.mktime(time.strptime(a, "%a %b %d %H:%M:%S %Y"))) # 将格式字符串转换为时间戳
# 输出结果依次如下:
当前时间戳为: 1581324209.745698
本地时间为 : time.struct_time(tm_year=2020, tm_mon=2, tm_mday=10, tm_hour=16, tm_min=43, tm_sec=29, tm_wday=0, tm_yday=41, tm_isdst=0)
本地时间为 : Mon Feb 10 16:43:29 2020
2020-02-10 16:43:29
Mon Feb 10 16:43:29 2020
1459175064.0
2、csv模块
(1)读取csv文件
# 新建mytest.cvs的文件,在其中逐行输入11、12、13/21、22、23/31、32、33等内容
import csv
with open('mytest.csv', encoding='utf-8-sig') as myfile:
print('The content is below:\n')
myfile_reader = csv.reader(myfile)
for line in myfile_reader:
print(line)
print('Finished')
# 输出结果:
The content is below:
['11', '12', '13']
['21', '22', '23']
['31', '32', '33']
Finished
#采用.join()函数将输出的列表转化成字符串
import csv
with open('mytest.csv', encoding='utf-8-sig') as myfile:
print('The content is below:\n')
myfile_reader = csv.reader(myfile)
for line in myfile_reader:
print(' '.join(line))
print('Finished')
# 输出结果:
The content is below:
11 12 13
21 22 23
31 32 33
Finished
(2)写入csv文件
import csv
with open('mytest.csv','w') as myfile:
myfile_writer = csv.writer(myfile)
myfile_writer.writerow([41,42,43])
print('写入完毕')
# mytest.csv文件的中被写入了41、42、43
# 写入多列数据
import csv
csv_data = ((1, 2, 3, 4, 5), ('a', 'b', 'c', 'd', 'e', 'f'), ('p', 'y', 't', 'h', 'o', 'n'))
output_file_name = 'csv_file.csv'
def save_csv(target_list, output_file_name):
# 将数据写入CSV文件
if not output_file_name.endswith('.csv'):
output_file_name = output_file_name + '.csv'
csv_file = open(output_file_name, 'w', newline='')
key_data = target_list[0]
value_data = [target for target in target_list]
csv_writer = csv.writer(csv_file)
csv_writer.writerow(key_data)
csv_writer.writerow(value_data)
csv_file.close()
save_csv(csv_data, output_file_name)
四、练习
- 学习使用time时间模块,计算某个函数执行所用的时间 。计算函数def test()运行时所需要的时间, 首先在函数执行前打印记录下时间, 函数执行结束后打印记录下时间, 结束时间-开始时间就是函数运行所需的时间。
import datetime,time
def test():
time.sleep(3)
starttime = datetime.datetime.now()
test()
endtime = datetime.datetime.now()
num = (endtime-starttime).seconds
print('程序运行耗时:'+str(num)+'秒')