常用模块整理

random模块

小数部分:

1.random.random()        大于0且小于1之间的小数,取不到边界

2.random.uniform(0,m)     大于0小于m的小数,取不到边界

整数部分:

3.random.randint(1,10)     大于等于1小于等于10的整数,可取边界

4.random.randrange(1,10,2) 大于等于1小于10的整数,不取右边界

列表随机:

5.random.choice(list)       随机返回列表中一个元素

6.random.sample(list,3)     随机返回列表中3个元素

7.random.shuffle(list)       随机给列表排序

 

time模块

组成: 时间戳时间,结构化时间,格式化时间

1) 时间戳时间: 又称格林威治时间,float数据类型,主要是给机器使用的时间.

   time.time() 用来获取截至目前一共用时多少秒,是从1970.1.1开始计时的.

2) 结构化时间: 时间对象,上下两种格式的中间形态.

   print(time.localtime()) 理解为:把时间戳时间经过localtime()换算后的初级形态,供格式化时间

   时来使用.  其结构是个元组,包含有年月日等一些信息.

3) 格式化时间: 又称字符串时间,str数据类型,主要是给人来使用的时间.

   time.strftime(%Y-%m-%d) 用来获取当前时间,并指定了显示格式

4) 三者之间换算:

   时间戳time.localtime结构化时间time.strftime格式化时间

   格式化时间time.strptime结构化时间mktime时间戳

5) 小练习: 计算本月1号的时间戳

   re=time.strftime(%Y-%m-1)     获取到当月1号的格式化时间

   struct_time=time.strptime(re)   得到当月1号的结构化时间

   print(time.mktime(struct_time)) 得到当月1号的时间戳时间

 

sys模块

作用: python解释器打交道的模块

常用命令: sys.path:    用来获取当前执行文件的所有路径

          sys.modules:  用来查看当前加载的所有模块信息

          sys.platform:   用来获取当前的操作系统位数信息,不准

               sys.exit():   放在程序中间,用来强制解释器退出,不执行后续代码的.

                sys.argv:   会生成个列表,并把执行这个文件时,写在python命令后的所有东西全部作为

                                 列表元素添加进去.以空格隔开的为一个元素.

用处举例: cmd窗口运行时,一次性把程序需要的所有元素都输入,让其自动运行

          name = sys.argv[1]

          pwd = sys.argv[2]

          if name == 'alex' and pwd == '3714':

                print('执行以下代码')

         else:

                exit()

 

  

os模块:

作用: 用来和操作系统打交道的

 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径

 os.chdir(文件路径) 改变当前脚本工作目录,相当于shell下的cd

 os.curdir 返回当前目录,等同于.   os.pardir() 获取当前目录的父目录字符串,等同于..

 os.makedirs(名称1,名称2,名称3...) 可一次生成多层递归目录

 os.mkdir(名称1) 可生成单级目录,如名称1存在则报错

 os.removedirs(名称1,名称2,名称3..) 若目录为空,则删除,并递归到上一级,还为空,接着删,以此类推

 os.rmdir(名称1) 删除单级目录,若目录不为空则无法删除

 os.listdir(目录名) 列出指定目录下的一级内容,包含隐藏文件,并以列表形式打印.

 os.remove(路径) 删除一个文件  os.rename(‘新文件’,’原文件’) 更改新文件名为原文件名.

 os.stat(path/filename) 获取文件/目录信息

 os.sep 输出操作系统特定的路径分隔符,  win\    linux/

 os.linesep 输出操作系统使用的行终止符,win:\r\n  linux:\n

 os.pathsep 输出用于分割文件路径的字符, win下是; linux下是:

 os.name 输出字符串指示当前使用平台, ’nt’代表win  ‘posix’代表linux

 os.system(bash command) 运行shell命令,直接显示

 os.popen(bash command).read() 运行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; 不存在则返回False

 os.path.isabs(path) 如果path是绝对路径,则返回True

 os.path.isfile(path) 如果path是一个存在的文件,则返回True.否则返回False

 os.path.isdir(path) 如果path是一个存在的目录,则返回True. 否则返回False

 os.path.join()  将多个路径组合后返回,最后一个绝对路径之前的参数将被忽略

 os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间

 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间

 os.path.getsize(path) 返回path的大小

 

序列化模块

包含三个模块:  json  pickle  shelve

1) str_dic=json.dumps(dic) 将字典转为字符串形式

    json.loads(str_dic)      将字符串形式的字典转为字典形式.

    json.dump(dic,f)     json.load(f)  用于文件操作.

 具体用法如下:

    with open(‘文件名’,mode=’w’,encoding=’utf-8’) as f:

             json.dump(dic,f)   可以将字典形式转为字符串并写入文件中

    with open(‘文件名’,mode=’r’,encoding=’utf-8’) as f1:

             print(json.load(f))   可以将文件内的字符串形式的字典读出,并自动转为字典形式.

 限制: json格式的key必须是个字符串数据类型,如果key数字类型,那么dump后会强行转为字符串类型的数字; 字典中value是个元组时,

 也会强行把元组转为列表,不可逆;  操作文件时,可一次性dump进多个数据,但不能直接一次load出来,解决办法为,dump完一个数据就

 用write写入,并加入换行,然后取的时候用for循环取出一个load一个;  dumps默认不支持中文,可通过修改参数的办法使其正常显示.

   dic是个包含中文的字典

   ret = json.dumps(dic,ensure_ascii = False)   序列化带中文字典为一个通用类型

   print(ret)

   dic_new = json.loads(ret)    反序列化.

   print(dic_new)

 最后,set集合也是不能被dumpdumps.

2) pickle模块: 用法同json命令,pickle.dump/pickle.dumps/pickle.load/pickle.loads这四种.

    pickle.dumps得到的结果是bytes类型,要求dump时也得是b模式打开文件,其存的内容也全部

    都是bytes类型,虽然看不懂,但是通过load出来后的格式和之前保持一致.

    注意,pickle来序列化一个类的对象时,要想load出对象的内容,必须要求该对象的类要存在,

     不然会报错的.

    pickle可一次写入多个数据,且能一次都读出来,用法如下:

    with open('新文件','wb') as f:

          pickle.dump({'k1':'v1'}, f)   

          pickle.dump({'k11':'v1'}, f)

          pickle.dump({'k11':'v1'}, f)     一次写入多行

    with open('新文件','rb') as f:

           while True:

                 try:

                      print(pickle.load(f))

          except EOFError:

                      break

3) shelve模块: 也是用来操作文件的;  用法举例:

      f = shelve.open('文件')                 会创建三个文件赋值给f

      f['key'] = {'k1':(1,2,3),'k2':'v2'}    一次给三个文件都写入key:value,是个字典

      f.close()

      f = shelve.open('文件')   

      content = f['key']              key来取对应的value

      f.close()

      print(content)

 

hashlib 模块

摘要算法模块, 作用:能够把一个字符串数据类型的变量转换成一个定长的,密文的字符串,字符串里的每个字符都是一个十六进制数字;对于同一个字符串,不管这个字符串有多长,只要是相同的,无论在任何环境下,什么时候执行,执行多少次,在任何语言中,只要使用相同的算法手段得到的结果永远是相同的,当字符串不同时,得到的结果一定不同.  常用的摘要算法有两个:md5sha1

md5: 算法相对简单,效率快,得到的是个32位的字符串,每个字符都是一个十六进制数

sha1: 算法相对复杂,效率低,得到的是个40位的字符串,每个字符也都是个十六进制数

这两个算法的用法和命令都一样,这里以md5来说明,其有两个命令或者说方法:updatehexdigest

y=hashlib.md5()                          实列化一个对象,          得到一个md5加工厂y

y.update(字符串.encode(‘utf-8))  对象调方法得到加密后的内容,  给加工厂送物料

res=y.hexdigest()         对象调方法读出加密后的内容赋值给res,   加工厂给你返回加工结果

print(res)                    打印输出显示出密文

以上为摘要算法的基本用法,有可能用撞库方式获得密文对应的内容.在我们可以获得用户输入的前提下,比如想升级破解的

难度,可用加盐的形式,提高密文质量.(一般现实中用户名和密码都相同的情况不会发生,各种平台也会限制用户名不得重复,

而获得更高的保密性,示列用法如下:)

name=input(‘输入用户名’)    pwd=input(‘输入密码’)

我们要加密的是用户密码, 用户名不会重复,此时可用用户名作为盐来提升密码的破解难度

y=hashlib.md5(name.encode(‘utf-8’))   md5后括号内加入的称为盐,注意也需要进行解码

y.update(pwd.encode(‘utf-8))         用加盐后的md5来调update方法把密码进行加密

res=y.hexdigest()                    读取加密后的密文

print(res)  打印呈现出来.  猜测,加盐的原理相当于是给要加密的字符串又拼接上了一段字符

用法举例: 通过对比两个文件的md5密文,可判定两个文件是否相同或判断下载的文件有么有丢包

    1.y=hashlib.md5()

       y.update(‘hello,world’.encode(utf-8))

      print(y.hexdigest())

2.y1=hashlib.md5()

      y1.update(‘hello,’.encode(utf-8))

      y1.update(‘world’.encode(utf-8))

      print(y1.hexdigest())

此时打印出的两个md5密文是一样的,用这个原理我们就可以对比两个远大于系统内存的文件是否一致,操作方法为分别循环两个文件,取出适量的大小分别做摘要算法,都完成后输出整体的算法结果来做比较,密文相同则认为这两个文件一致.

posted @ 2018-08-12 21:38  叶落kiss  阅读(245)  评论(0编辑  收藏  举报