zoukankan      html  css  js  c++  java
  • 常见模块(一)

    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:Python34python.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格式
















  • 相关阅读:
    设置发光字
    QQ空间无导航条应对方法
    网页设计经典网站欣赏
    页面居中显示
    获取元素的绝对位置
    输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.
    最长重复子字符串
    从头到尾彻底解析Hash 表算法
    求二叉树中节点的最大距离
    MySQL学习笔记——显示数据库信息
  • 原文地址:https://www.cnblogs.com/worter991/p/5219910.html
Copyright © 2011-2022 走看看