Python基础(11)_python模块之time模块、rando模块、hashlib、os模块

一、模块

1、什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀

  模块的本质:模块的本质是一个py文件

2、模块分为三类:1)内置模块;2)第三方模块;3)自定义模块

3、使用模块的目的:

  退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

  随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用,

4、模块的使用:通过import 调用

示例文件:spam.py,文件名spam.py,模块名spam

 1 #spam.py
 2 print(‘from the spam.py‘)
 3
 4 money=1000
 5
 6 def read1():
 7     print(‘spam->read1->money‘,money)
 8
 9 def read2():
10     print(‘spam->read2 calling read‘)
11     read1()
12
13 def change():
14     global money
15     money=0

4.1模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行(import语句是可以在程序中的任意位置使用的,且针对同一个模块很import多次,为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载大内存中的模块对象增加了一次引用,不会重新执行模块内的语句),如下

 1 #test.py
 2 import spam #只在第一次导入时才执行spam.py内代码,此处的显式效果是只打印一次‘from the spam.py‘,当然其他的顶级代码也都被执行了,只不过没有显示效果.
 3 import spam
 4 import spam
 5 import spam
 6
 7 ‘‘‘
 8 执行结果:
 9 from the spam.py
10 ‘‘‘

我们可以从sys.module中找到当前已经加载的模块,sys.module是一个字典,内部包含模块名与模块对象的映射,该字典决定了导入模块时是否需要重新导入。

4.2 每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突

 1 #测试一:money与spam.money不冲突
 2 #test.py
 3 import spam
 4 money=10
 5 print(spam.money)
 6
 7 ‘‘‘
 8 执行结果:
 9 from the spam.py
10 1000
11 ‘‘‘
 1 #测试二:read1与spam.read1不冲突
 2 #test.py
 3 import spam
 4 def read1():
 5     print(‘========‘)
 6 spam.read1()
 7
 8 ‘‘‘
 9 执行结果:
10 from the spam.py
11 spam->read1->money 1000
12 ‘‘‘
 1 #测试三:执行spam.change()操作的全局变量money仍然是spam中的
 2 #test.py
 3 import spam
 4 money=1
 5 spam.change()
 6 print(money)
 7
 8 ‘‘‘
 9 执行结果:
10 from the spam.py
11 1
12 ‘‘‘

总结:首次导入模块spam时会做三件事:

  1.为源文件(spam模块)创建新的名称空间,在spam中定义的函数和方法若是使用到了global时访问的就是这个名称空间。

  2.在新创建的命名空间中执行模块中包含的代码,见初始导入import spam

  3.创建名字spam来引用该命名空间

1.#为模块名起别名,相当于m1=1;m2=m1
2.import spam as sm
3.print(sm.money)

#在一行导入多个模块
1.import sys,os,re

二、常用内置模块

1、time模块

  1、时间的表示形式    

    在Python中,通常有这三种方式来表示时间:时间戳元组(struct_time)格式化的时间字符串

    (1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。

    (2)格式化的时间字符串(Format String): ‘1988-03-16’

    (3)元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)

 1 # <1> 时间戳
 2 >>> import time
 3 >>> time.time()      #--------------返回当前时间的时间戳
 4 1493136727.099066
 5
 6 # <2> 时间字符串
 7 >>> time.strftime("%Y-%m-%d %X")
 8 ‘2017-04-26 00:32:18‘
 9
10 # <3> 时间元组
11 >>> time.localtime()
12 time.struct_time(tm_year=2017, tm_mon=4, tm_mday=26,
13                  tm_hour=0, tm_min=32, tm_sec=42, tm_wday=2,
14                  tm_yday=116, tm_isdst=0)

    小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的

  2、几种时间形式的转换

    (1)

 1 # print(time.time())   #  仅仅是当前时间的时间戳     float型
 2 #------------------------------------------------
 3 #print(time.localtime())  #  当前时间的结构化时间对象
 4
 5 s=time.localtime(312431212)      #  结构化时间对象         将时间戳------->结构化时间
 6 s2=time.gmtime()        #  结构化时间对象   UTC时间
 7
 8 # print(s.tm_year)
 9 # print(s.tm_wday)
10 #------------------------------------------------
11 t="2012-12-12"
12 ret=time.mktime(time.localtime())  #  将结构化时间------->时间戳
13 print(ret)
14 #------------------------------------------------
15 ret2=time.strftime("%Y-%m-%d",time.localtime())  # 将结构化时间------>字符串时间
16 print(ret2)
17 #------------------------------------------------
18 ret3=time.strptime("1900:03:12","%Y:%m:%d")               # 将字符串时间----->结构化时间
19 print(ret3)

    (2)

1 >>> time.asctime(time.localtime(312343423))
2 ‘Sun Nov 25 10:03:43 1979‘
3 >>> time.ctime(312343423)
4 ‘Sun Nov 25 10:03:43 1979‘
#--------------------------其他方法
# sleep(secs)
# 线程推迟指定的时间运行,单位为秒。

2、random模块

  1、random模块的使用

>>> import random
>>> random.random()      # 大于0且小于1之间的小数
0.7664338663654585

>>> random.randint(1,5)  # 大于等于1且小于等于5之间的整数

>>> random.randrange(1,3) # 大于等于1且小于3之间的整数

>>> random.choice([1,‘23‘,[4,5]])  # #1或者23或者[4,5]

>>> random.sample([1,‘23‘,[4,5]],2) # #列表元素任意2个组合
[[4, 5], ‘23‘]

>>> random.uniform(1,3) #大于1小于3的小数
1.6270147180533838

>>> item=[1,3,5,7,9]
>>> random.shuffle(item) # 打乱次序
>>> item
[5, 1, 3, 7, 9]

>>> random.shuffle(item)
>>> item
[5, 9, 7, 1, 3]

  2、random模块的应用:最近生成五位数的验证码

#练习: 随机生成五位数验证码
def valdate_code():
    ret=""
    for i in range(5):
        num=random.randint(0,9)
        alfa=chr(random.randint(97, 122))
        alfa2=chr(random.randint(65, 90))
        s=random.choice([str(num),alfa,alfa2])
        ret=ret+s
    return ret

    # 思路2
    # ret=random.sample([1,2,3,4,5,6,7,8,9,0],5)
    # print(ret)
    # print(type(ret))
    # #
    # ret=‘‘.join(ret)
    # # return ret

print(valdate_code())

3、hashlib

  1、hash:一种摘要算法 ,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

  2、摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)
  三个特点:
    1.内容相同则hash运算结果相同,内容稍微改变则hash值则变
    2.不可逆推
    3.相同算法:无论校验多长的数据,得到的哈希值长度固定。

  3、以常见的摘要算法MD5为例,计算出一个字符串的MD5值:

import hashlib

md5 = hashlib.md5()
md5.update(‘how to use md5 in python hashlib?‘)
print md5.hexdigest()

计算结果如下:
d26a53750bc40b38b65a520292f69306

  如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的:

md5 = hashlib.md5()
md5.update(‘how to use md5 in ‘)
md5.update(‘python hashlib?‘)
print md5.hexdigest()

  MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似:

import hashlib

sha1 = hashlib.sha1()
sha1.update(‘how to use sha1 in ‘)
sha1.update(‘python hashlib?‘)
print sha1.hexdigest()

  SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度更长。

  4、摘要算法应用

    4.1网站存储用户登录的用户名和登录密码

username | password
---------+---------------------------------
michael  | e10adc3949ba59abbe56e057f20f883e
bob      | 878ef96e86145580c38c87f0410ad153
alice    | 99b1c2188db85afee403b1536010c2c9

    4.2,防止网站数据泄露后,黑客“撞库”,对网站存储用户登录的用户名和登录密码进行“加盐”,即通过对原始口令加一个复杂字符串来实现

hashlib.md5("abc".encode("utf8"))

    经过Salt处理的MD5口令,只要Salt不被黑客知道,即使用户输入简单口令,也很难通过MD5反推明文口令。

4、os模块

  1、os模块是与操作系统交互的一个接口 

‘‘‘
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: (‘.‘)
os.pardir  获取当前目录的父目录字符串名:(‘..‘)
os.makedirs(‘dirname1/dirname2‘)    可生成多层递归目录
os.removedirs(‘dirname1‘)    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir(‘dirname‘)    生成单级目录;相当于shell中mkdir dirname
os.rmdir(‘dirname‘)    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir(‘dirname‘)    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat(‘path/filename‘)  获取文件/目录信息
os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    输出字符串指示当前使用平台。win->‘nt‘; Linux->‘posix‘
os.system("bash command")  运行shell命令,直接显示
os.environ  获取系统环境变量
os.path.abspath(path)  返回path规范化的绝对路径
os.path.split(path)  将path分割成目录和文件名二元组返回
os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  如果path是绝对路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
‘‘‘

 

 1 os路径处理
 2 #方式一:推荐使用
 3 import os
 4 #具体应用
 5 import os,sys
 6 possible_topdir = os.path.normpath(os.path.join(
 7     os.path.abspath(__file__),
 8     os.pardir, #上一级
 9     os.pardir,
10     os.pardir
11 ))
12 sys.path.insert(0,possible_topdir)
13
14
15 #方式二:不推荐使用
16 os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
时间: 2024-10-11 06:58:37

Python基础(11)_python模块之time模块、rando模块、hashlib、os模块的相关文章

python基础11 ---函数模块1

函数模块 一.函数模块的作用(为什么要有函数模块) 1.函数模块可以减少代码量 2.函数模块方便阅读 3.函数模块维护性强二.函数模块的本质以及调用方法 1.函数模块的本质就是一个.py结尾的文件,该文件内写入大量函数 2.必须用import来引用函数模块,在调用函数模块时必须以"模块名.函数名"来调用函数模块中的函数. 3.有的时候我们只需要用到模块中的某个函数,也可以用"from 模块名 improt 函数1,函数2"的方式来引用该模块,但只是一次引用,不建议使

python基础学习shutil高级的文件,目录,压缩包处理模块

shutil高级的文件,目录,压缩包处理模块import shutil 复制shutil.copyfileobj(f1,f2) #从一个文件对接复制到另一个文件对象,需要先打开文件shutil.copyfile() #拷贝文件shutil.copystat() #只拷贝文件状态信息 包括 modebits,atime,mtime,flagsshutil.copymode() #值拷贝权限.内容和组,用户均不改变shutil.copy() #拷贝文件和权限shutil.copy2() #同时拷贝文

【Python基础】之三个文件在不同目录下导入指定模块的方法

如下图三个文件的目录路径 – project     |–  1     |    |–  2     |    |    |–  3    |    |    |    |– owen.py     |–  A     |    |–  test.py    |    |–  B    |    |    |–  C    |    |    |    |– et.py 说明:owen.py是class A(): et.py继承class B(A);    test.py通过et.py调用ow

Python基础11—图形界面编程

一.弹出消息框 要编辑消息框,首先要导入tkinter的messagebox,导入方法:from tkinter.messagebox import * ①弹出提示消息框:showinfo(title='标题',message='内容') ②弹出警告消息框:showwarning(title='标题',message='内容') ③弹出错误消息框:showerror(title='标题',message='内容') 1 from tkinter.messagebox import * 2 sho

python基础11(函数三)

一.函数参数的类型 之前我们接触到的那种函数参数定义和传递方式叫做位置参数,即参数是通过位置进行匹配的,从左到右,依次进行匹配,这个对参数的位置和个数都有严格的要求.而在Python中还有一种是通过参数名字来匹配的,这样一来,不需要严格按照参数定义时的位置来传递参数,这种参数叫做关键字参数. >>> def display(a,b): print a print b >>> display('hello','world') # 位置参数,即参数是通过位置进行匹配 hel

python基础11 文件操作 ,字符编码

主要内容 文件操作 文件操作 打开文件的模式 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,同a r+:可读可写,若文件不存在,报错:w+: 可读可写,若文件不存在,创建. "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模

python基础知识8——模块1——自定义模块和第三方开源模块

模块的认识 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块. 如:os 是系统相关的模块:file是文件操作相关的模块 模块分为三种: 自定义模块 内置模块 第三方开源模块 自定义模块 1.定义模块 2.导入模块 Python之所以应用越来越广泛,在一定程度上也

Python基础知识10(模块与包库的安装使用)

(1)使用标准库#标准库: Python安装包里面提供的功能模块和包主要包括内置类型和函数 #比如len.int.open等 #直接使用,无需import 功能模块 #包含程序设计所需的常用的功能 #需要用import导入他们就可以使用 import timeprint(time.strftime("%Y_%m_%d %H:%M:%S")) #打印结果如下2018_06_17 11:06:16 ----------------------------------------------

python模块基础之OS模块

OS模块简单的来说它是一个Python的系统编程的操作模块,可以处理文件和目录这些我们日常手动需要做的操作. 可以查看OS模块的帮助文档: >>> import os #导入os模块>>> help(os)   #查看os模块帮助文档,里面详细的模块相关函数和使用方法 二.OS模块重要函数和变量: 1 ).os.sep 更改操作系统中的路径分隔符.2 ).os.getcwd()获取当前路径,这个在Python代码中比较常用.3 ).os.listdir() 列出当前目录

python 之 os 模块的常见用法

在Python的标准库os模块中包含普遍的操作系统功能 os 模块引入的方法是: import os 以下为 os 模块常见的使用方法: 1.os.getcwd 获取当前的工作目录,即程序执行的目录 2.os.name 字符串指示正在使用的平台.比如,windows是"nt",linux 或 unix 是"posix" 3.os.getenv()  读取环境变量.比如,os.getenv('PATH') 4.os.setenv()  设置环境变量. 5.os.lis