常用模块与包

一个模块就是一个包含了python定义和声明的文件文件名就是模块名字加上.py的后缀。

#编写好的一个python文件可以有两种用途:
    一:脚本,一个文件就是整个程序,用来被执行
    二:模块,文件中存放着一堆功能,用来被导入使用


#python为我们内置了全局变量__name__,
    当文件被当做脚本执行时:__name__ 等于'__main__'
    当文件被当做模块导入时:__name__等于模块名

#作用:用来控制.py文件在不同的应用场景下执行不同的逻辑(或者是在模块文件中测试代码)
    if __name__ == '__main__':

为何要使用模块?

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

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

导入模块import

      模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,
              它们只在模块名第一次遇到导入import语句时才执行,  第一次导入后就将模块内容加载到内存,后续的import语句仅是对已经加载大内存中的模块对象增加了一次引用,不会重新执行模块内的语句, 可以从sys.modules中找到当前已经加载的模块,sys.modules是一个字典,内部包含模块名与模块对象的映射,该字典决定了导入模块时是否需要重新导入。

导入py内置模块:import 内置模块名(内置模块地址python36/lib)

安装导入第三方模块: 再cmd中输 pip.exe路径 pip install 要安装的模块名,就可以去py中导入

导入自定义模块:1.再运行py的同级目录创建py文件,文件内有执行的方法,函数程序(不可跨目录)      2.import 自定义模块py名     py名.py函数名运行  

命名空间
  导入一个模块的时候命名空间的变化
   第一:创建了一块属于这个模块的命名空间
   第二:创建了一个变量 指向这个命名空间
   第三:执行这个文件

为导入的模块起别名 as

模块导入后可以用as语法把模块名定给一个变量,相当于再调用的全局空间中用变量来指向模块内存地址

当两个模块提供的功能相似,使用时要根据状态改变,可以使用as给同一个变量,加if语句判断使用情况,再使用时只需用变量名,可以按if转换模块名

作用:  1.可以将长的模块名改成段的,便于操作 2.有利于代码的拓展优化
用法:from time import datetime as read

 1 mode = 'pickle'
 2 if mode == 'pickle':
 3     import pickle
 4 else:
 5     import json
 6 
 7 def dump():
 8     if mode == 'pickle':
 9         pickle.dump(obj,f)
10     elif mode == 'json':
11         json.dump(obj, f)
12 
13 def load():
14     if mode == 'pickle':
15         pickle.load(f)
16     elif mode == 'json':
17         json.load(f)
18 
19 #再不同模块相似功能及使用情况下
20 
21 mode = 'pickle'
22 if mode == 'pickle':
23     import pickle as mode
24 else:
25     import json as mode
26 
27 def dump():
28     mode.dump(obj,f)
29 
30 def load():
31     mode.load(f)

 常用模块  

1.hashlib

          哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

import hashlib
def md5(a,b):
    md5 = hashlib.md5(a.encode('utf-8'))
    md5.update(b.encode('utf-8'))
    print(md5.hexdigest())
md5('加密用盐','加密文件')
# 计算结果如下:
10aa8dd7290464266ec0c08b7a5e9bce

值得注意的是,一个文件一次加密和分割后多次update加密最后的密文一致

2.random

>>> import random
#随机小数
random.random() # 大于0且小于1之间的小数 random.uniform(起始int,结束int) #中间取小数 #随机整数 random.randint(1,5) # 大于等于1且小于等于5之间的整数 random.randrange(1,10,2) # 大于等于1且小于10之间的奇数(切片取值) #随机选择一个返回 random.choice([1,'23',[4,5]],x) #默认没x,从有序数列结构中随机选择一个
                     #选择x个返回,可重复 random.sample([1,'23',[4,5]],x) # #列表元素任意2个组合 不重复 #打乱列表顺序 item=[1,3,5,7,9] random.shuffle(item) # 打乱次序 print(item) [5, 1, 3, 7, 9]

3.sys 

sys模块是与python解释器交互的一个接口

1 sys.argv[cmd窗口参数列表索引]      
2     接收cmd方式调用,命令行生成参数List,空格间隔输入py执行使用参数
3     0索引元素是py文件路径,1索引传入第一个参数,2索引是传入的第二个参数
4 sys.exit(n)        退出程序,正常退出时exit(0),错误退出sys.exit(1)
5 sys.version        获取Python解释程序的版本信息
6 sys.path           返回模块的搜索路径,py查找模块的目录,初始化时使用PYTHONPATH环境变量的值
  sys.path.append(path) 添加一个模块查找目录
7 sys.platform      返回操作系统平台名称   
8 sys.getrecursionlimit() python默认支持的递归数量 1000
9 sys.setrecursionlimit(998) 更改递归层数
10 sys.getrefcount , 获取一个变量的被赋值引用次数
"""让用户执行脚本传入要删除的文件路径,在内部帮助用将目录删除。
C:Python36python36.exe D:/code/s21day14/7.模块传参.py D:/test ----->  用py程序7.传参模块脚本删除指定文件
cmd 窗口命令(C:Python36)环境变量以有,不必输入:python36 D:/code/s21day14/7.模块传参.py​ D:/text(列表索引1,参数元素)
"""
import sys
# 在cmd中先导入程序运行py36,再获取用户执行脚本地址加入,传入的参数(被操作文件路径)。
# C:Python36python36.exe D:/code/s21day14/7.模块传参.py D:/test
print(sys.argv)
#cmd导入成功后打印sys.argv = [D:/code/s21day14/7.模块传参.py, D:/test]
path = sys.argv[1]
print(path)
# 模块删除目录(以下添加cmd传入参数的操作)
# import shutil
# shutil.rmtree(path)

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

 1 #当前执行这个python文件的工作目录相关的工作路径
 2 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
 3 os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
 4 os.curdir  返回当前目录: ('.')
 5 os.pardir  获取当前目录的父目录字符串名:('..')
 6 
 7 #和文件夹相关
 8 os.makedirs('dirname1/dirname2')    可生成多层递归目录
 9 os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
10 os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
11 os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
12 os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
13 
14 # 和文件相关
15 os.remove()  删除一个文件
16 os.rename("oldname","newname")  重命名文件/目录
17 os.stat('path/filename')  获取文件/目录信息
18 
19 # 和操作系统差异相关
20 os.sep    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
21 os.linesep    输出当前平台使用的行终止符,win下为"	
",Linux下为"
"
22 os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
23 os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
24 
25 # 和执行系统命令相关
26 os.system("bash command")  运行shell命令,直接显示
27 os.popen("bash command).read()  运行shell命令,获取执行结果
28 os.environ  获取系统环境变量
29 
30 #path系列,和路径相关
31 os.path.abspath(path) 返回path规范化的绝对路径 
32 os.path.split(path) 将path分割成目录和文件名二元组返回 
33 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 
34 os.path.basename(path) 返回path最后的文件名。如何path以/或结尾,那么就会返回空值,即os.path.split(path)的第二个元素。
35 os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
36 os.path.isabs(path)  如果path是绝对路径,返回True
37 os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
38 os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
39 os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
40 os.path.getatime(path)  返回path所指向的文件或者目录的最后访问时间
41 os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
42 os.path.getsize(path) 返回path的大小

os.stat('path/filename')  获取文件/目录信息 的结构说明

 1 stat 结构:
 2 
 3 st_mode: inode 保护模式
 4 st_ino: inode 节点号。
 5 st_dev: inode 驻留的设备。
 6 st_nlink: inode 的链接数。
 7 st_uid: 所有者的用户ID。
 8 st_gid: 所有者的组ID。
 9 st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
10 st_atime: 上次访问的时间。
11 st_mtime: 最后一次修改的时间。
12 st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。
13 
14 stat结构    file_size = os.stat(path).st_size
 1 用os复制文件
 2 import os              
 3 import time
 4 #1.读取文件的大小(字节)
 5 path=r'D:PYs20选课系统.py'
 6 other_path=r'D:PYs20log'
 7 file_size = os.stat(path).st_size
 8 read_size=0
 9 if os.path.exists(path) is True:   #路径存在返回True
10     with open(path,'rb') as f,
11         open(other_path,'wb')as f1:
12         chunk=f.read(1024)
13         f1.write(chunk)
14         read_size += len(chunk)
15         val = int(read_size /file_size * 100)
16         time.sleep(0.09)            #暂停0.09s
17         print(f'{val}%
',end='')   #设置end的换行为空,打印完毕不换行,	重写
18 #
与
 	类似,
的功能为波光标移动到文件开始位,前一次内容全部撤销重写新内容

查看路径下文件

 1 os.path.abspath() , 获取一个文件的绝对路径
 2 path = '20190409_192149.mp4' # D:codes21day1420190409_192149.mp4
 3 import os 
 4 v1 = os.path.abspath(path) 
 5 print(v1)
 6 
 7 os.path.dirname ,获取路径的上级目录
 8 import os
 9 v = r"D:codes21day1420190409_192149.mp4"
10 print(os.path.dirname(v))     >>>D:codes21day14
11 
12 os.path.join ,路径的拼接
13 import os 
14 path = "D:codes21day14" # user/index/inx/fasd/ v = 'n.txt'
15 result = os.path.join(path,v) 
16 print(result) 
17 result = os.path.join(path,'n1','n2','n3') 
18 print(result)
19 
20 os.listdir , 查看一个目录下所有的文件【第一层】
21 import os
22 result = os.listdir(r'D:codes21day14') 
23 for path in result:    
24     print(path)
25 
26 os.walk , 查看一个目录下所有的文件【所有层】
27 
28 import os
29 result = os.walk(r'D:codes21day14') 
30 for a,b,c in result:    # a,正在查看的目录 b,此目录下的文件夹  c,此目录下的文件    
31 for item in c:        
32     path = os.path.join(a,item)        
33     print(path)
原文地址:https://www.cnblogs.com/OB19227/p/10657266.html