目录
- 模块介绍
- time &datetime模块
- random
- json & picle
一、模块介绍
在我们日常的程序开发过程中,随着代码越写越多,在单个文件里的代码就会越来越长,越来越不容易维护。为了便于维护,把很多函数分组,分别放到不同的文件里。这样,每个文件包含的代码就相对少了很多。这就是一种很便利的代码组织方式。在Python中,每个.py文件就称之为一个模块。
模块又分为以下三种:
- 自定义模块
- 内置模块
- 开源模块
1、自定义模块
在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。
比如handle.py,在该文件定义了函数home()
那么在其他文件中就可以import handle,然后通过handle.home()来调用了,当然也可以通过from handle import home来引入。不过要注意层级问题!
最后执行user_main.py,就会输出对应的home()的执行结果。
导入模块详解
主要有一下几种方法可以导入模块:
- import module
- from module.xx.xx import xx
- from module.xx.xx import xx as rename
- from module.xx.xx import *
其实导入模块就是告诉解释权去解释哪个py文件,但是导入模块时是根据sys.path的路径作为基准来进行的。
导入py文件,解释权解释该py文件;
导入包,解释权解释该包下的_init_.py文件
2、开源模块
安装:
自动安装
- yum
- pip
- apt-get (ubuntu)
- easy_install
编译安装
下载-》解压-》编译 Python setup.py build ->安装 python setup.py install
导入模块时使用import即可
3、内置模块
Python中,安装好了Python后,本身就带有的库,就叫做Python的内置的库。
内置模块,也被称为Python的标准库。比如很多常见的sys/os/re/json等等。
二、内置模块
1、time和datetime
关于date/datetime/time的区别
1,date是日期,通常就是日历上的年月日,比较大一点的时间单位。
2,time通常就是指秒钟数,即从1970年1月1日至今进过的秒钟数。或者指一天中的时分秒,比较小一点的时间单位。就像你问别人What's the time,别人会告诉你几点几分,而不会告诉你年月日。
3,datetime就是年月日和时分秒,包含以上两者。
datetime 模块是用来处理日期时间的,通常是用来进行计算日期,可以很方便的使用加减运算。而time模块主要是用来处理秒钟时间的,当然这个秒钟数也可以转化成日 期,获取当前日期通常就是从这个模块获取的。不过说time时,有时候表示的也会很宽泛,因为它的词义就是时间嘛,这个不用太计较的。不过date的意义 是确定无疑的。
time模块提供各种操作时间的函数。一般有两种表示时间的方式:
- 时间戳
- 以数组的形式,共有9个元素,分别表示用一个时间戳的struct_time会因为时区不同而不同。
year (four digits, e.g. 1998)
month (1-12)
day (1-31)
hours (0-23)
minutes (0-59)
seconds (0-59)
weekday (0-6, Monday is 0)
Julian day (day in the year, 1-366)
DST (Daylight Savings Time) flag (-1, 0 or 1) 是否是夏令时
asctime() 将当前时间转化成字符串
>>> time.asctime()
'Wed Feb 17 13:45:29 2016'
clock() 该函数有两个功能。在第一次调用的时候,返回的是程序运行的实际时间;第二次之后的调用,返回的是自第一次调用后,到这次调用的时间间隔ctime() 将当前时间转换成一个时间字符串
>>> time.ctime()
'Wed Feb 17 13:49:38 2016'
gmtime() 将一个时间戳转换成UTC时区(0时区)struct_time >>> time.gmtime()
time.struct_time(tm_year=2016, tm_mon=2, tm_mday=17, tm_hour=5, tm_min=51, tm_sec=15, tm_wday=2, tm_yday=48, tm_isdst=0)
localtime() 将一个时间戳转换为当前时区的struct_time >>> time.localtime()
time.struct_time(tm_year=2016, tm_mon=2, tm_mday=17, tm_hour=13, tm_min=52, tm_sec=32, tm_wday=2, tm_yday=48, tm_isdst=0)
mktime() 将stuct_time转换为时间戳 >>> time.mktime(time.gmtime())
1455659784.0
strftime() 将指定的struct_time根据指定的格式化字符串输出 %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 当前时区的名称
%% %号本身
>>> t = (2016, 2, 17, 17, 3, 38, 1, 48, 0)
>>> t = time.mktime(t)
>>> time.strftime("%b %d %Y %H:%M:%S", time.gmtime(t))
'Feb 17 2016 09:03:38'
strptime(string[,format]) 将指定格式把一个时间字符串解析为时间元组 >>> struct_time = time.strptime("30 Nov 23", "%d %b %y")
>>> print(struct_time)
time.struct_time(tm_year=2023, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=334, tm_isdst=-1)
time() 返回当前时间的时间戳 >>> time.time()
1455689293.777393
sleep() 表示推迟指定时间运行,单位为秒 常用的几个函数总结 >>> print('处理器时间: %s'%time.clock())
处理器时间: 0.232888
>>> print('处理器时间: %s'%time.process_time())
处理器时间: 0.233331
>>> print('时间戳: %s'%time.time())
时间戳: 1455689340.538427
>>> print('当前系统时间: %s'%time.ctime())
当前系统时间: Wed Feb 17 14:09:00 2016
>>> print('昨天的现在时间: %s'%time.ctime(time.time()-86400))
昨天的现在时间: Tue Feb 16 14:09:00 2016
>>> print(time.gmtime(time.time()))
time.struct_time(tm_year=2016, tm_mon=2, tm_mday=17, tm_hour=6, tm_min=9, tm_sec=1, tm_wday=2, tm_yday=48, tm_isdst=0)
datetime 是处理日期和时间的标准库。
datetime.datetime.now() 获取当前日期和时间,其类型是datetime
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2016, 2, 17, 14, 25, 20, 934740)
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2016, 2, 17, 14, 46, 57, 210727)
>>> print(now)
2016-02-17 14:46:57.210727
>>> print(now.timetuple())
time.struct_time(tm_year=2016, tm_mon=2, tm_mday=17, tm_hour=14, tm_min=46, tm_sec=57, tm_wday=2, tm_yday=48, tm_isdst=-1) datetime.date.today() 获取当前日期 >>> print(datetime.date.today())
2016-02-17
datetime.date.fromtimestamp() 将时间戳转换成日期格式 >>> print(datetime.date.fromtimestamp(time.time()-86400) )
2016-02-16
2、random模块
该模块用于生成随机数。虽然有多种方法,但是最常用的还是random.randrange(start,stop,step)。下面具体介绍相关方法的使用:
random.random random.random()用于生成一个0到1的随机浮点数 0<=n<1.0 >>> import random
>>> random.random()
0.95179927622791
>>> random.random()
0.4513535438217471
random.uniform random.uniform(a,b)用于生成一个指定范围的随机浮点数 >>> random.uniform(1,10)
5.283284377758914
>>> random.uniform(1,10)
4.474916412178455
random.randint random.randint(a,b)用于生成一个指定范围的随机整数 >>> random.randint(1,10)
10
>>> random.randint(1,10)
9
random.randrange random.randrange(start,stop,step)用于生成一个指定访问,并且指定步长的随机整数 >>> random.randrange(1,100,3)
91
>>> random.randrange(1,100,3)
58
random.choice random.choice(seq)从序列中获取一个随机元素。参数seq表示一个有序类型,如list/tuple >>> random.choice('tom')
'o'
>>> random.choice('tom’)
't'
random.shuffle random.shuffle(x[,random]) 用于将一个列表中的元素打乱 >>> s1 = ['asd','sdd','ewqe’]
random.shuffle(s1)
>>> print(s1)
['ewqe', 'asd', 'sdd']
random.sample random.sample(seq,k) 表示从指定序列随机获取指定长度的片段,并不会修改原有序列 l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> s = random.sample(l1,3)
>>> print(s)
[1, 7, 4]
>>> print(l1)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
示例:生成带字母数字的验证码
checkcode = ''
for i in range(4):
current = random.randint(0,4)
if current != i:
tmp = chr(random.randint(65,90))
else:
tmp = random.randint(0,9)
checkcode += str(tmp)
print(checkcode)
3、OS模块
常用方法:
os.name 输出字符串指示正在使用的平台。windows 则是’nt’,对于Linux等,则为’posix’ os.getcwd() 获取当前的工作目录,即当前Python脚本工作的目录路径 os.listdir() 获取指定目录下所有文件和目录名 os.remove() 删除一个文件 os.system() 运行shell命令 os.linesep 字符串给出当前平台使用的行终止符 os.path.split() 返回一个路径的目录名和文件名 >>> os.path.split('/Users/jack/ssh.sh’)
('/Users/jack', 'ssh.sh')
os.path.isfile()和os.path.isdir()函数分别检验给出的路径是一个文件还是目录。 >>> os.path.isdir(os.getcwd())
True
>>> os.path.isfile('ssh.sh’)
True
os.path.exists() 函数用来检验给出的路径是否真地存在 >>> os.path.exists('ssh.sh')
True
>>> os.path.exists('ssh.shs’)
False
os.path.abspath() 获取绝对路径 >>> os.path.abspath('ssh.sh’)
'/Users/jack/ssh.sh'
os.path.getsize() 获取文件的大小 >>> os.path.getsize('ssh.sh’)
316
os.path.dirname() 获取目录 >>> os.path.dirname('./Pictures/pic.tar.gz’)
'./Pictures'
四、json和pickle
pickle模块实现了基本的数据序列和饭反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久储存;通过pickle模块的反序列化操作,能够从文件中创建上一次程序保存的对象。
提供了四个功能:dumps、dump、loads、load
pickle.dump()序列化对象,并将结果数据流写入到文件对象中;
pickle.load(file)反序列化对象,将文件中的数据解析为一个Python对象。