常见模块(一)

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)

输出结果如下:

  1. ['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']

在默认路径中是没有你自定义模块和开源模块路径(在安装过程中直接安装到次路径下除外)

具体操作方法如下:

  1. #!/usr/bin/env python
  2. # -*-coding:utf-8 -*-
  3. import sys,os 导入sys os模块
  4. print('sys',__file__) 获取文件的相对路径
  5. dir_base = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) #获取文件的根目录
  6. #os.path.abspath(__file___)获取文件的绝对路径
  7. #os.path.dirname 获取文件的绝对路径目录,实际是将/符号前的内容进行删除操作,每执行一次,进行一次删除操作。
  8. print('dir_base',dir_base)
  9. sys.path.append(dir_base) #sys.path为系统默认变量,将刚刚的变量加入进临时变量
  10. print(sys.path)
  11. print(sys.path) 获取系统环境变量,默认为列表
  12. 默认执行错误的原因是由于文件默认是找不到最根目录,而user_name能执行的原因,因为他就在根目录。


3.开源模块
Python 官方网站提供了一些被认证的开源模块可供下载,地址为:https://pypi.python.org/pypi 
可以使用pip命令进行下载安装,也可手动下载后执行安装操作。


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) 查看方法

例子:生成验证码:

  1. import random
  2. for i in range(6): #6代表随机码的位数,因为每循环一次会随机生产一次,然后进行叠加到checkcode中。
  3. corrent = random.randrange(0,4)
  4. if corrent != i:
  5. tmp = str(chr(random.randrange(65,90))) #chr 是转换成ASCII码, 默认65-90为A-Z 使用str转换成字符串
  6. else:
  7. tmp = str(random.randrange(0,9)) #
  8. checkcode += tmp
  9. print(checkcode)
执行结果:
  1. C:\Python34\python.exe E:/Python/随机数.py
  2. 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格式
















posted @ 2016-02-26 11:52  worter  阅读(222)  评论(0编辑  收藏  举报