【Python学习】常用模块

2021-02-15 10:22

阅读:351

一、模块&包

1、模块

  模块实质上就是一个Python文件,它是用来组织代码的。意思就是把Python代码写在里面,文件名就是模块的名称。例如:random.py,random就是模块的名称。

2、包

  包又叫pageage,本质就是一个文件夹,和文件夹不一样的地方是它有一个__init__.py文件。包是从逻辑上来组织模块的,也就是说它是用来存放模块的。如果想导入其他目录下的模块,那么这个目录必须是一个包才能导入。

二、模块的分类

1、标准模块、标准包

  Python自带的标准模块,直接import就能使用

  例如:import string,random,datatime,json,os等

2、第三方模块

  别人写好的一些模块,需要安装才能使用。

  想要实现某个功能,可以先用百度搜索一下有没有第三方模块

3、自己写的Python文件

三、第三方模块的安装

1、傻瓜式的

  (1)在命令行窗口直接输入:pip install pymysql(Python已加入环境变量)

  pip在Python3.4以上的版本是自带的。但这种方式需要保证pycharm中的Project Interpreter路径是Python安装路径,否则即使窗口显示下载安装成功,依然不能成功import。因为在命令窗口下载下来的第三方包是存储在Python安装路径\python3\Lib\site-packages下的,而pycharm import时,是从pycharm→File→Settings→Project Interpreter→设置的路径下\Python\Python36\Lib\site-packages去取第三方安装包的。

  (2)若提示“pip命令不存在”

      把Python安装目录下的Script目录的路劲加入到环境变量再执行pip命令

  (3)若提示“Unknown or unsupported command ‘install‘”

      a、打开 C:\strawberry\perl\bin\

      b、把这个目录下的pip 都改成其他的名字

  (4)也可以直接在pycharm中安装第三方模块,这样安装的模块直接装在Project Interpreter→设置的路径下\Python\Python36\Lib\site-packages下,可以直接使用

如下图: 技术图片

2、手动安装

  (1)安装whl结尾的安装包

    shift+右键,在此处打开命令行窗口(或者在地址栏中直接输入cmd)

    pip install redis-2.10.6-py2.py3-none-any.whl

  (2)安装tar.gz结尾的安装包

    a、解压这个安装包

    b、进入到这个解压之后的文件夹中

    c、在命令行中输入:python setup.py install

3、卸载模块

  pip uninstall pymysql

四、模块导入的顺序、实质

1、Python模块导入的顺序

  (1)从当前目录下查找

  (2)从Python环境变量中查找

2、导入模块的实质

  把Python文件从头到尾执行一遍

3、导入当前目录下的Python文件(模块)

(1)第一种方式:   

1 import test
2 a = test.name  # 调用test文件中的name变量
3 test.my()      # 调用test文件中的my()函数

(2)第二种方式

1 from test import my,name
2 a = name  # 调用name变量
3 my()      # 调用my函数

4、导入其他目录下的Python文件(模块)

(1)先把存放Python文件(模块)的目录加入环境变量

1 # 先把目录加入环境变量再导入
2 import sys
3 sys.path.insert(0,‘E:\Python\Script‘)  # 插到环境变量最前面,效率高

(2)导入Python文件(模块)

1 import test  # 导入test模块
2 a = name     # 调用name变量
3 my()         # 调用my函数

当前目录下和环境变量下都有同一个文件时,会优先选择当前目录下的文件

常用模块

一、string模块

技术图片
1 import string
2 print(string.ascii_letters)    # 所有大小写字母
3 print(string.ascii_lowercase)  # 所有小写字母
4 print(string.ascii_uppercase)  # 所有大写字母
5 print(string.digits)           # 所有数字
6 print(string.punctuation)      # 所有特殊标点符号
7 print(string.printable)        # 数字+字母+特殊字符
技术图片

二、random模块

技术图片
1 import random,string
2 pickts = [‘A‘,‘J‘,‘Q‘,‘K‘,2,3,4,5,6]
3 random.shuffle(pickts)                    # 洗牌,打乱顺序(只能传list)
4 print(pickts)
5 print(random.randint(1,10))               # 随机取1到10之间的整数
6 print(round(random.uniform(1,99),2))      # 随机取1到99之间的小数,小数点后保留2位小数
7 print(random.choice([1,2,3,4]))           # 随机取数组当中的1个元素
8 print(random.sample(string.printable,5))  # 随机取N个元素,返回的是list
技术图片

三、sys模块

技术图片
 1 import sys
 2 print(sys.platform)          # 判断是什么操作系统
 3 sys.path.append(BASEPATH)    # 将BASEPATH插到环境变量最后
 4 sys.path.insert(0,BASEPATH)  # 将BASEPATH插到环境变量最前面,效率高
 5 print(sys.path)              # Python的环境变量
 6 print(sys.version)           #获取Python解释程序的版本信息
 7 print(sys.argv)  # 用来获取命令行里面运行python文件的时候传入的参数,它返回的是一个list
 8 # 它默认就有一个参数,就是当前文件的文件名,如果运行的命令在该python文件名后还带有参数则该参数也会加入返回的list当中
 9 # 在命令行中输入:python sys模块.py --help
10 # 返回:[‘sys模块.py‘, ‘--help‘]
技术图片

 下面写一段程序来说明sys.argv的作用

  1、它是用来获取命令行里面运行python文件的时候传入的参数
  2、它返回的是一个list
  3、这个list默认就有一个参数,就是当前的这个文件名

技术图片
 1 import sys
 2 command = sys.argv
 3 print(command)
 4 if len(command) > 1:
 5     cmd1 = command[1]
 6     if cmd1 == ‘--help‘:
 7         print(‘这是个帮助文档‘
 8               ‘这个python文件是用来说明sys.argv的作用‘)
 9     elif cmd1 == ‘os‘:
10         print(‘当前的操作系统是%s‘%sys.platform)
11     else:
12         print(‘输入命令有误‘)
13 else:
14     print(‘运行python文件的时候需要传入一个参数,‘
15           ‘e.g:‘
16           ‘python xx.py install‘
17           )
18 # 输入命令:python tools.py --help
19 # 返回:[‘tools.py‘, ‘--help‘]  这是个帮助文档这个python文件是用来说明sys.argv的作用
20 # 输入命令:python tools.py os
21 # 返回:[‘tools.py‘, ‘--help‘]  当前的操作系统是win32
22 # 输入命令:python tools.py
23 # 返回:[‘tools.py‘]  运行python文件的时候需要传入一个参数,e.g:python xx.py install
技术图片

四、os模块

技术图片
 1 # 对操作系统的一些操作
 2 import os
 3 print(os.getcwd())          # 获取当前目录
 4 os.chmod(‘/usr/local‘,777)  # 给文件或目录加权限,一般用于linux操作系统(1执行2写4读)
 5 print(os.chdir(‘../‘))      # 更改目录,可以填相对路径和绝对路径(与Linux一样),没有返回值
 6 print(os.makedirs(‘niuniu/python‘))      # 递归创建目录,父目录不存在时会自动创建,可创建多层目录
 7 print(os.mkdir(‘nhy‘))      # 创建目录,父目录不存在会报错,只能创建一级目录
 8 print(os.removedirs(‘niuniu/python‘))    # 递归删除目录,只能删除空目录
 9 print(os.rmdir(‘nhy‘))      # 删除指定目录,只能删除空目录
10 print(os.remove(‘test.py‘)) # 删除文件,只能删除文件
11 print(os.listdir(‘e:\\‘))   # 列出目录下的所有文件和目录,放在一个list里面
12 print(os.rename(‘test‘,‘test1‘))         # 重命名
13 print(os.stat(‘day6.py‘))   # 获取文件信息
14 print(os.sep)      # 根据当前操作系统自动生成路径分隔符
15 print(‘day6‘+os.sep+‘x.py‘) # 拼路径
16 print(os.linesep)  # 当前操作系统的换行符
17 print(os.pathsep)  # 当前系统环境变量中每个路径的分隔符,linux是冒号,Windows是分号
18 print(os.environ)  # 当前系统的环境变量
19 print(os.name)     # 当前系统名称,Windows是nt,Linux是posix
20 print(os.system(‘dir‘))             # 执行操作系统命令,获取不到结果(返回的是0执行成功或1执行失败)
21 print(os.popen(‘ipconfig‘).read())  # 执行操作系统命令,能获取到命令执行的结果
22 print(os.path.abspath(‘.‘))         # 获取当前目录的绝对路径
23 print(os.path.abspath(__file__))    # 获取到当前文件的绝对路径
24 print(os.path.split(‘E:\Pycharm_Workspace\day6.py‘))        # 分割路径和文件名,返回的是一个元组,第一个元素是路径,第二个元素是文件名
25 print(os.path.dirname(‘E:\Pycharm_Workspace\Python-code‘))  # 获取父目录,获取它的上一级目录
26 print(os.path.basename(‘/usr/local/test.txt‘))              # 获取路径的最后一级,如果是文件则显示文件
27 print(os.path.exists(‘E:\Pycharm_Workspace\Python-code‘))   # 判断目录/文件是否存在
28 print(os.path.isabs(‘./‘))           # 判断是否绝对路径
29 print(os.path.isfile(‘E:\day6.py‘))  # 判断是否是一个文件,判断文件是否存在
30 print(os.path.isdir(‘E:\day6‘))      # 判断是否是一个目录,判断目录是否存在
31 print(os.path.getsize(‘E:\Pycharm_Workspace\Python-code\day6\day6.py‘))  # 获取文件的大小
32 print(os.path.join(r‘\usr‘,‘local‘,‘tomcat‘,‘logs‘))  # 拼接成一个路径
33 os.walk(‘E:\Pycharm_Workspace‘)      # 遍历目录,列出目录下所有的目录和文件,一层一层下去
34 # 循环三个变量,分别代表路径、目录和文件
35     # abs_path 当前循环的绝对路径
36     # dir      目录下面的所有文件夹
37     # file     目录下的所有文件
38 for abs_path,dir,file in os.walk(r‘E:\Pycharm_Workspace\Python-code\day6\test‘):
39     print(abs_path,dir,file)
技术图片

练习一:在logs目录下创建子目录及在各目录下创建相关日志文件

技术图片
 1 import datetime,os
 2 dirs = [‘tomcat‘,‘nigix‘,‘apache‘,‘python‘,‘app‘,‘android‘,‘ios‘]
 3 base_path = ‘E:\logs‘
 4 os.chdir(base_path)
 5 for d in dirs:
 6     os.mkdir(d)
 7     os.chdir(d)
 8     for i in range(10):
 9         t = datetime.date.today() + datetime.timedelta(days=-i)
10         name = ‘%s_%s.log‘%(d,t)
11         open(name,‘w‘,encoding=‘utf-8‘)
12     os.chdir(‘../‘)
技术图片

练习二:往日期为双数的日志文件中写内容

技术图片
1 import os
2 for abs_path,dir,file in os.walk(‘E:\logs‘):
3     for f in file:
4         day = f.split(‘.‘)[0].split(‘-‘)[-1]
5         if int(day)%2 == 0:
6             file_name = os.path.join(abs_path,f)  # 拼接绝对路径
7             open(file_name,‘w‘,encoding=‘utf-8‘).write(‘测试中‘)
技术图片

五、time模块 

1、基本用法:

技术图片
1 import time
2 print(time.time())       # 获取当前时间戳:从unix元年到现在过了多少秒
3 print(time.gmtime())     # 取标准时区的时间(比中国时间慢8小时),返回的是时间元组
4 print(time.localtime())  # 取当前时区的时间,返回的是时间元组
5 print(time.strftime(‘%Y-%m-%d‘))  # 获取格式化好的时间,格式可以自己定义
6 print(time.strftime(‘%Y-%m-%d %H:%M:%S‘))
7 print(time.strftime(‘%Y%m%d%H%M%S‘))
8 # Y:年,m:月,d:日,H:时,M:分,S:秒
9 time.sleep(5)  # 等待时间5秒
技术图片

2、把时间戳转换成格式化好的时间:

  a、先把时间戳转换成时间元组

  b、再把时间元组转换成格式化好的时间

1 import time
2 f = time.time()       # 获取当前时间戳
3 s = time.localtime(f) # 把时间戳转换成时间元组
4 m = time.strftime(‘%Y-%m-%d %H:%M:%S‘,s)  # 把时间元组转换成格式化时间
5 print(m)

定义函数:把时间戳转换成格式化好的时间函数

  a、不传入时间戳的话,返回当前格式化好的时间

  b、传入时间的话,把时间戳转换成格式化好的时间并返回

技术图片
 1 def timestamp_to_fomat(timestamp=None,format=‘%Y-%m-%d %H:%M:%S‘):
 2     if timestamp:
 3         time_tuple = time.localtime(timestamp)
 4         res = time.strftime(format,time_tuple)
 5     else:
 6         res = time.strftime(format)  # 默认取当前时间
 7     return res
 8 print(timestamp_to_fomat())
 9 print(timestamp_to_fomat(1224398473))
10 print(timestamp_to_fomat(1224398473,‘%Y-%m-%d‘))
技术图片

3、把格式化好的时间转换成时间戳:

  a、先把格式化好的时间转换成时间元组

  b、再把时间元组转换成时间戳

1 import time
2 m = ‘2017-1-1 18:20:11‘  # 定义格式化好的时间
3 p = time.strptime(m,‘%Y-%m-%d %H:%M:%S‘)  # 把格式化好的时间转换成时间元组
4 s = time.mktime(p)  # 把时间元组转换成时间戳
5 print(s)

定义函数:把格式化好的时间转换成时间戳函数

  a、不传入格式化好的时间的话,返回当前时间戳

  b、传入格式化好的时间的话,把格式化好的时间转换成时间戳并返回

技术图片
 1 def strToTimestamp(str=None,format=‘%Y-%m-%d %H:%M:%S‘):
 2     if str:  # 如果传了时间
 3         tp = time.strptime(str,format)  # 转成时间元组
 4         res = time.mktime(tp)  # 再转成时间戳
 5     else:
 6         res = time.time()  # 默认取当前时间戳
 7     return int(res)
 8 print(strToTimestamp())
 9 print(strToTimestamp(‘2011-2-28 12:30:15‘))
10 print(strToTimestamp(‘2011-2-28‘,‘%Y-%m-%d‘))
技术图片

六、datetime模块

   datetime模块和time模块类似,也可以进行时间戳、时间元组以及格式化时间的相互转换。

技术图片
 1 import datetime
 2 print(datetime.datetime.today())  # 获取当前时间,精确到秒
 3 print(datetime.date.today())      # 获取当前时间,精确到天
 4 print(datetime.datetime.now())    # 当然时间格式化输出
 5 res = datetime.date.today() + datetime.timedelta(days=5)#获取5天以后的时间
 6 res = datetime.date.today() + datetime.timedelta(days=-5)#获取5天以前的时间
 7 res = datetime.date.today() + datetime.timedelta(weeks=5)#获取5周以后的时间
 8 res = datetime.datetime.today() + datetime.timedelta(hours=5)#获取5小时以后的时间
 9 res = datetime.datetime.today() + datetime.timedelta(minutes=5)#获取5分钟以后的时间
10 res = datetime.datetime.today() + datetime.timedelta(seconds=5)#获取5秒钟以后的时间
11 res = datetime.datetime.today() + datetime.timedelta(days=5,hours=5,minutes=5,seconds=5,weeks=5)
12 print(res.strftime(‘%Y%m%d--%H%M%S‘))  # 格式化时间输出
13 print(res)
技术图片

七、hashlib模块

  hashlib模块用于加密,加密方式包括:md5、sha1、sha224、sha256、sha384、sha512、blake2b、blake2s、sha3_224、sha3_256、sha3_384、sha3_512、

shake_128和shake_256等等。

技术图片
 1 import hashlib
 2 passwd = ‘jj123‘      # 普通字符串不能加密,必须是二进制的bytes
 3 f = passwd.encode()   # 把字符串转成bytes(二进制)类型
 4 m = hashlib.md5()     # 定义加密方法
 5 m.update(f)           # 对bytes(二进制)类型字符串进行加密
 6 print(m.hexdigest())  # 获取结果返回
 7 # md5加密是不可逆的
 8 
 9 # 其他加密方法,用法与md5一样,只是返回的密文长度不一样
10 passwd = ‘jack‘
11 f = passwd.encode()
12 m = hashlib.sha256()
13 m.update(f)
14 print(m.hexdigest())
技术图片

封装加密函数:

技术图片
1 def my_md5(str):
2     new_str = str.encode()  # 把字符串转成bytes类型
3     # new_str = b‘%s‘%str   # 把字符串转成bytes类型
4     m = hashlib.md5()       # 实例化md5对象
5     m.update(new_str)       # 加密
6     return m.hexdigest()    # 获取结果返回


评论


亲,登录后才可以留言!