四周四次课(11月9日)


在日常的开发工作中,我们要写很多的python代码,如果都写在一个文件中,会导致代码特别难维护,为了拓展代码的可维护性,我们把函写在不同的文件里,这样每个文件包含的代码就比较少,逻辑更加清楚。在python中,我们创建的文件基本都是以.py结尾,那一个.py的文件就称之为模块。

        为了方便管理模块,python中又引了包(Package)这个概念。每个包下面都有一个__init__.py文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,举个例子:test目录下面有__init__.py aaa.pybbb.py三个文件,如下图所示:

 

[root@localhost ~]# tree test

test

├──aaa.py

├──bbb.py

└──__init__.py

 

0 directories, 3 files


一、import

有时候一个文件或者一个包中已经出现了一个函数,我们在另一个python代码中需要引入该文件或者该文件的某个函数,那怎么解决呢?python给我们提供一个关键字import,下面我们来了解一下它的用法:

1,如果是本地导入文件,直接使用:import filename

2,如果导入的是一个包,该包下面必须是有__init__.py文件才可以导入,否则报错,只有有了__init__.py文件,python解析器才会把这个目录当成包.

常用的导入模块的格式:

form xxx import xxx

import xxx

在导入的时候,.py的后缀直接省略,如果是多级的包,或者想导入包里面的函数等,可以使用from进行导入,举个例子:

from aaa import bbb

import os

解释:第一个例子是导入aaa包下面的bbb模块或者导入aaa文件下面的bbb类或者函数

第二个import是直接导入系统os模块


二、 datetime获取时间

在Python文档里,time是归类在Generic Operating System Services中,它提供的功能更加接近于操作系统层面。通读文档可知,time模块是围绕着Unix Timestamp进行的。

python 开发过程中,我们经常会用到获取当前时间,根据当前时间生成一个和当天时间相关的文件,这样我们在后期查找文件的时候就方便了很多,那python又如何来获取当前时间呢?

from datetime import datetime
now_time = datetime.now()
a = now_time.strftime('%Y-%m-%d')
print(now_time)
print(a)
print(type(now_time))

结果:

2017-11-09 16:33:04.573000
2017-11-09
<type 'datetime.datetime'>

解释:

1,先导入datetime类

2,通过datetime的now方法就获得当前所需要的时间

3,datetime还是有好多方法的,可以获取year, month,等,可以通过dir()方法查看

4,此时我们获得的now_time还是一个datetime类,所以我们需用用strftime方法转换成字符串,strftime的参数就是最终需要字符串的形式。

5,Strftime的时间参数有很多,下面我们介绍一下最常用的一些参数:

格式参数:

%Y 带世纪部分的十进制年份

%m 十进制表示的月份

%d 十进制表示的每月的第几天

%H 24小时制的小时

%M 十进制表示的分钟数

%S 十进制的秒数

%c  标准时间,如:04/25/17 14:35:14  类似于这种形式

这几个参数就是最常用到的时间参数。


在我们开发过程中,经常要取昨天的时间,或者明天的时间,那有应该怎么办呢?

例子:


from datetime import datetime, timedelta
now_time = datetime.now()
a = now_time.strftime('%c')
print(now_time)
print(a)
b = now_time + timedelta(days=-1)
print(b)

结果:

2017-11-09 16:38:24.879000
11/09/17 16:38:24
2017-11-08 16:38:24.879000

解释:

Timedelta可以接收daysseconds两个参数,正数代表几天之后,负数代表几天之前的。所以b代表的是一天之前的时间。


三、 时间格式相互转换

时间的三种存在方式:时间对象,时间字符串,时间戳。


(1)字符串转datetime:

from datetime import datetime, timedelta
string = '2017-04-25 11:59:58'
time1 = datetime.strptime(string, '%Y-%m-%d %H:%M:%S')
print(time1)
print(type(time1))

结果:

2017-04-25 11:59:58
<type 'datetime.datetime'>

(2)datetime转字符串:

from datetime import datetime, timedelta
string = '2017-04-25 11:59:58'
time1 = datetime.strptime(string, '%Y-%m-%d %H:%M:%S')
print(time1)
print(type(time1))
time1_str = datetime.strftime(time1, '%Y-%m-%d %H:%M:%S')
print(type(time1_str))
print(time1_str)

结果:

2017-04-25 11:59:58
<type 'datetime.datetime'>
<type 'str'>
2017-04-25 11:59:58


(3)时间戳转时间对象:

from datetime import datetime, timedelta
import time
time1 = time.time()
print(time1)
time1_str = datetime.fromtimestamp(time1)
print(time1_str)
print(type(time1_str))

结果:

1510217085.08
2017-11-09 16:44:45.081000
<type 'datetime.datetime'>

解释:

1,datetime模块是包装了time模块的,所以只需要了解datetime模块就可以。

2,time.time()是当前时间的时间戳,时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

3,datetime下面有个函数fromtimestamp(时间戳)会把时间戳自动转换成datetime类型