1.模块介绍
就是一堆代码实现了某个功能的代码集合。
类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中) 。 python 是函数式编程。模块由一个.py文件或多个.py模块组成。
模块分为三种:
1).自定义模块
2).内置标准模块或称标准库
3.)开源模块 https://pypi.python.org/pypi
对于下面的问题需要完善和解释
2.自定义模块
根据需求编写py文件后形成可复用的内容,可作为模块加载使用。
自定义模块导入方法:
import module
from module.xx.xx import yy 其中xx代表子模块的名称,若模块就一级模块级module则不需要后面内容,yy则是需要调用的模块
from module.xx.xx import yy as rename 给导入的模块定义别名
from module.xx.xx import * 导入模块下所有 不推荐 ,因为默认情况不知道有哪些模块,可能会把自己的功能冲突,导致功能模块不可用。
导入模块其实就是告诉Python解释器去解释那个py文件
- 导入一个py文件,解释器解释该py文件
- 导入一个包,解释器解释该包下的 __init__.py 文件
关于导入模块的默认路径:
由于在python安装后内置一些模块,而这些模块会在python制定的目录下,加入需要将开源模块和自定义模块使系统能自动识别,需要把自定义模块路径和开源模块路径加入到默认路径中,具体查找默认路径及修改默认路径方法如下:
获取默认路径:
import sys
print (sys.path)
输出结果如下:
['E:\Python\S', 'E:\Python\', 'C:\Windows\system32\python34.zip', 'C:\Python34\DLLs', 'C:\Python34\lib', 'C:\Python34', 'C:\Python34\lib\site-packages', 'C:\Python34\lib\site-packages\win32', 'C:\Python34\lib\site-packages\win32\lib', 'C:\Python34\lib\site-packages\Pythonwin']
在默认路径中是没有你自定义模块和开源模块路径(在安装过程中直接安装到次路径下除外)
具体操作方法如下:
#!/usr/bin/env python
# -*-coding:utf-8 -*-
import sys,os 导入sys os模块
print('sys',__file__)
获取文件的相对路径dir_base = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) #获取文件的根目录
#os.path.abspath(__file___)获取文件的绝对路径
#os.path.dirname 获取文件的绝对路径目录,实际是将/符号前的内容进行删除操作,每执行一次,进行一次删除操作。
print('dir_base',dir_base)
sys.path.append(dir_base) #sys.path为系统默认变量,将刚刚的变量加入进临时变量
print(sys.path)
print(sys.path) 获取系统环境变量,默认为列表
默认执行错误的原因是由于文件默认是找不到最根目录,而user_name能执行的原因,因为他就在根目录。
4.常用内置模块
4.1 .time & datetime模块
time 常用功能
print(time.clock()) #返回处理器时间,3.3开始已废弃 用的比较少
print(time.process_time()) #返回处理器时间,3.3开始已废弃
print(time.time()) #返回当前系统时间戳 从1970开始,到现在的时间(这个是系统默认的,UNIX系统应该是1970年发布的。) 主要用来判断时间差
print(time.ctime()) #输出Tue Jan 26 18:23:48 2016 ,当前系统时间
print(time.ctime(time.time()-86400)) #将时间戳转为字符串格式 (后面数字的单位为秒,一天为86400秒)
print(time.gmtime(time.time()-86400)) #将时间戳转换成struct_time格式 这个测试下,重要
执行结果:
>>> time.gmtime()
time.struct_time(tm_year=2016, tm_mon=1, tm_mday=30, tm_hour=10, tm_min=22, tm_s
ec=54, tm_wday=5, tm_yday=30, tm_isdst=0)
print(time.localtime(time.time()-86400)) #将时间戳转换成struct_time格式,但返回 的本地时间 和gmtime的时间区别是,gmtime返回的是格林威治时间,与localtime相差8个小时。
print(time.mktime(time.localtime())) #与time.localtime()功能相反,将struct_time格式转回成时间戳格式
#time.sleep(4) #sleep
print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) ) #将struct_time格式转成指定的字符串格式
输出结果:2016-02-19 02:33:36
print(time.strptime("2016-01-28","%Y-%m-%d") ) #将字符串格式转换成struct_time格式
与上面正好相反的
不能直接把字符串转换成时间戳,把字符串转成时间戳,需要将字符串转换成struct_time,然后在将struct_time转换成时间戳
datatime 模块
print(datetime.date.today()) #输出格式 2016-01-26
print(datetime.date.fromtimestamp(time.time()-864400) ) #2016-01-16 将时间戳转成日期格式
current_time = datetime.datetime.now() #
print(current_time) #输出2016-01-26 19:04:30.335935
print(current_time.timetuple()) #返回struct_time格式
#datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
print(current_time.replace(2014,9,12)) #输出2014-09-12 19:06:24.074900,返回当前时间,但指定的值将被替换
str_to_date = datetime.datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M") #将字符串转换成日期格式
new_date = datetime.datetime.now() + datetime.timedelta(days=10) #比现在加10天
new_date = datetime.datetime.now() + datetime.timedelta(days=-10) #比现在减10天
new_date = datetime.datetime.now() + datetime.timedelta(hours=-10) #比现在减10小时
new_date = datetime.datetime.now() + datetime.timedelta(seconds=120) #比现在+120s
print(new_date)
4.2.random模块 随机数
import random
print random.random() 产生随机数
print random.randint(1,2) 在这个范围内产生随机数
print random.randrange(1,10)
dir(random) 查看方法
例子:生成验证码:
import random
for i in range(6): #6代表随机码的位数,因为每循环一次会随机生产一次,然后进行叠加到checkcode中。
corrent = random.randrange(0,4)
if corrent != i:
tmp = str(chr(random.randrange(65,90))) #chr 是转换成ASCII码, 默认65-90为A-Z 使用str转换成字符串
else:
tmp = str(random.randrange(0,9)) #
checkcode += tmp
print(checkcode)
C:Python34python.exe E:/Python/随机数.py
SQVUHO
4.3.序列化
序列化和反序列化
传输或对外提供都是字符串和ASIC码, 列表、字典、元组是内存中的格式。
- json,用于字符串 和 python数据类型间进行转换
- pickle,用于python特有的类型 和 python的数据类型间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
import pickle
data = {'k1':123,'k2','123'}
p_str = pickle.dumps(data)
print p_str
pickle.dumps 将数据通过特殊的形式转换为只有python语言能识别的字符串。
with open('e:/test.txt','w') as ft:
pikcle.dump (data,fp)
pikcle.dump 将数据通过特殊的形式转换为只有python语言能识别的字符串。并写入文件。
json.dumps 将数据通过特殊的形式转换为所有程序语言都能认识的字符串
json.dump 将数据通过特殊的形式转换为所有程序语言都能认识的字符串,并写入文件。
load、loads 和dump、 dumps功能正好相反。
pikcle 和 json 的区别在于,pikcle能对python环境下任何格式文件存储到文件中,通过load/loads进行还原后仍是原有的格式。而json则只能对字符串等常见格式进行格式化存储,因此假若程序旨在python环境下运行,使用pikcle最为合适,若需要与其他程序进行互通,则需要使用json,保障其他语言能读取。
经测试,json不支持str格式