神刀安全网

Python全栈开发之7、模块和几种常见模块以及format知识补充

一、模块的分类

Python流行的一个原因就是因为它的第三方模块数量巨大,我们编写代码不必从零开始重新造轮子,许多要用的功能都已经写好封装成库了,我们只要直接调用即可,模块分为内建模块、自定义的模块、安装的第三方的模块,一般都放在不同的地方,下面来看一下内建模块怎么导入,以及他们存放的位置。

import sys                          # 可以用import 直接导入内建模块 for i in sys.path:                  # sys.path存放有每次导入模块都会去搜寻的路径     print(i) ''' C:/Users/Tab/AppData/Local/Programs/Python/Python35/python.exe C:/Users/Tab/PycharmProjects/modules/1.py C:/Users/Tab/PycharmProjects/modules   C:/Users/Tab/PycharmProjects/modules                                 #自定义模块放在当前工作空间 C:/Users/Tab/AppData/Local/Programs/Python/Python35/python35.zip C:/Users/Tab/AppData/Local/Programs/Python/Python35/DLLs C:/Users/Tab/AppData/Local/Programs/Python/Python35/lib                      #内建模块存放位置 C:/Users/Tab/AppData/Local/Programs/Python/Python35 C:/Users/Tab/AppData/Local/Programs/Python/Python35/lib/site-packages              #第三方库的安装位置 ''' #可以向sys.path中用append()的方法导入,例如 sys.path.append('D:')后,在D:目录下的py文件可以用import直接导入 print(sys.platform)   # win32  sys.platform可以获取当前工作平台(win32)or linux #此外 sys.argv可以获取脚本的参数,argv[0] 是脚本名,argv[1]是第一个参数...

二、模块的导入

首先要说明下,自己定义的模块的名字和内建模块的名字不要相同,否则的话,导入的时候会出现问题,内建的模块,和第三方模块已经存在sys.path的路径中,所以直接导入即可,下面来说明下自己写了一个项目,项目中的各个库是如何导入的,假设我定义了一个modules的项目,下面是其目录结构看如何在1.py文件导入

Python全栈开发之7、模块和几种常见模块以及format知识补充

上图左边是目录树,右边是在1.py文件中如何导入在lib/account.py下定义的函数,列举了三种常用导入方式。

三、os模块

os模块是与操作系统相关的模块,比如说对文件和目录的操作,获取路径等,都可以用os模块来实现 ,os模块提供的功能太多,下面来简单的看一下常用用法

import os print(os.getcwd())          # C:/Users/Tab/PycharmProjects/modules 获取当前工作路径 print(os.environ)           # 获取系统环境变量 print(os.getenv('PATH'))    # 获取PATH环境变量的值 os.mkdir('test')            # 在当前工作空间创建一个test目录 os.remove('path/to/file')   #  删除文件 os.rmdir('test')            #删除'test'目录 print(os.stat('1.py'))      # 返回文件的详细信息 os.stat_result(st_mode=33206 ... st_nlink=1, st_uid=0, st_gid=0, st_size=3152...) print(os.path.basename(r'C:/Users/Tab/PycharmProjects/modules/1.py'))     #获取路径下的文件名 1.py print(os.path.abspath('1.py'))                            #获取文件的绝对路径 C:/Users/Tab/PycharmProjects/modules/1.py print(os.path.dirname(r'C:/Users/Tab/PycharmProjects/modules/1.py'))      #获取路径下的路径名 print(os.path.split(r'C:/Users/Tab/PycharmProjects/modules/1.py'))        #分割文件和路径 print(os.path.join(r'C:/Users/Tab/PycharmProjects/modules','1.py'))       #合并路径

四、hashlib模块

hashlib是一个加密模块,提供了常见的加密算法,比如MD5,SHA1,SHA256等,它通过一个函数,把任意长度的数据转换为一个长度固定的数据串,常用来保存密码等,比如将用户的密码用MD5加密后,保存到数据库,用户登录时先计算用户输入的明文口令的MD5,然后和数据库存储的MD5对比,如果一致,说明密码输入正确,如果不一致,密码肯定错误。下面来看一下用法

import  hashlib  passwd=hashlib.sha256() passwd.update(bytes('123456',encoding='utf-8'))        # 假设密码是123456 将其转换为字节,传入函数 print(passwd.hexdigest())                             # 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92  passwd=hashlib.sha256(bytes('wxtrkbc',encoding='utf-8'))  #对原始密码加一个复杂字符串来提高安全性,俗称“加盐”: passwd.update(bytes('123456',encoding='utf-8')) print(passwd.hexdigest())                             # d2641b3d7243c87fe3f1312a30fe9909ae80d034f0a799da0897934311ee351b

五、datetime模块

datetime是一个与时间相关的模块,可以处理日期和时间的互换,下面来看一下用法

import datetime  print(datetime.datetime.now())                                         # 2016-05-17 15:46:40.784376  获取当前的日期和时间 print(datetime.datetime.now()+datetime.timedelta(days=10))             # 2016-05-27 15:47:45.702528  将当前的时间向后推迟10天 print(datetime.date.today())                                           # 2016-05-17  获取当前的日期 print(datetime.datetime.utcnow())                                      # 2016-05-17 08:23:41.150628  获取格林威治时间  print(datetime.datetime.now().timetuple())                      # time.struct_time(tm_year=2016 ... tm_hour=16,...)获取当前一个包含当前时间的结构体 print(datetime.datetime.now().timestamp())                      # 1463473711.057878  获取当前的时间戳 print((datetime.datetime.fromtimestamp(1463473711.057878)))          # 2016-05-17 16:28:31.057878 将时间戳转换成日期和时间 print(datetime.datetime.strptime('2016-05-17 16:28:31','%Y-%m-%d %H:%M:%S'))  #2016-05-17 16:28:31     str转换为datetime print(datetime.datetime.now().strftime('%D, %m %d %H:%M'))                    #05/23/16, 05 23 10:10  datetime转换为str

六、 format

以前我们都是用百分号格式化字符串,现在我们用一种更牛逼的方式来格式化字符串format,下面来看一下format的常规用法。

print("1 am {},age {}".format('jason',18))                          # 用{}当作占位符 print("1 am {},age {}".format(*['jason',18]))                       # 用*传递一个列表进去 print("1 am {0},age {1},score{1}".format('jason',18))              # 1 am jason,age 18,score18  用 0,1等数字来应用 print("1 am {name},age {age}".format(name='jason',age=18))          # 用key引用,传递键值对 print("1 am {name},age {age}".format(**{'name':'jason','age':18}))  # 用**传递一个字典 print("1 am {0[0]},age {1[1]}".format([1,2,3],[4,5,6]))             # 1 am 1,age 5 print("i am {:s}, age {:d}".format(*["jason", 18]))                 # 还可用指定整形 print("i am {:.2%}".format(0.2))                                    # i am 20.00%

七、练习

写一个用户的登陆注册的界面,用户的密码用hashlib加密存在文件中,登陆时候,用户的密码要和文件中的密码一致才行。

def sha(password):                                #加密函数     passwd = hashlib.sha256(bytes('wxtrkbc', encoding='utf-8'))     passwd.update(bytes(password,encoding='utf-8'))     return passwd.hexdigest()  def register(user,passwd):                           #注册函数,并将密码加密后存在文件中     with open('db','a') as f :         f.write(user+':'+sha(passwd))  def login(user,passwd):                             #登陆函数 并判断登陆密码是否正确     with open('db','r',encoding='utf-8')as f :         for line in f :             info=line.strip().split(':')             if user==info[0] and sha(passwd)==info[1]:          # 将密码加密后与文件中存储的进行对比,一样就是相同的用户                 print('login success')                 return True             else:                 print('login error')                 return False  def main():     k=input('1注册,2登陆')     if int(k)==1:         user=input('输入用户名:')         passwd=input('输入密码:')         register(user,passwd)     elif int(k)==2:         user = input('输入用户名:')         passwd = input('输入密码:')         login(user,passwd)     else:         return

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » Python全栈开发之7、模块和几种常见模块以及format知识补充

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址