Python第十二课:模块及time模块、csv模块

一、模块的定义

  • 函数
    在这里插入图片描述
  • 类,比函数强大,封装了属性和方法,可以实现更多的功能
    在这里插入图片描述
  • 模块,比函数、类还要更加强大,封装了更多的功能代码。模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便重用。也就是模块可以封装任何数据、代码。
    在这里插入图片描述
  • 每一个后缀名为.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)

四、练习

  1. 学习使用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)+'秒')
发布了15 篇原创文章 · 获赞 0 · 访问量 248

猜你喜欢

转载自blog.csdn.net/fightingoyo/article/details/104246117
今日推荐