今天继续介绍常用模块的功能,在介绍的过程中会尽可能多的对模块功能进行描述,在需要重点掌握的功能出会有掌握星级标注:五颗星级别最高(必须要掌握的),四颗星用的时候要知道的
常用模块
和普通模块一样,在进行常用模块的调用时,首先要做的就是正确的调用
1.sys模块(系统模块,主要是对解释器做一些操作)
sys.path ★★★★★ 查看环境变量,之前已经介绍过了,可以查看环境变量中都包含有那些路径,是一个列表类型,所以可以手动 通过sys.path向其中添加环境变量
sys.modules ★★★★ 查看内存中已经加载的模块,是一个字典类型
sys.argv ★★★ 命令行参数List,第一个元素是程序本身路径,获取终端调用时的参数,是一个列表类型 用法:在终端里面执行批py文件,例如在py文件里边写一个拷贝文件功能:
# 终端版复制文件工具
# 源文件路径
source = sys.argv[1]
# 目标文件路径
dispath = sys.argv[2]
with open(source,"rb") as f:
data = f.read()
with open(dispath, "wb") as f2:
f2.write(data)
这个程序在py文件中右键是执行不了的,在终端中的执行使用步骤:
首先输入运行环境python3然后按照下图所示一次输入最后回车即可实现拷贝文件的功能,要注意:每输入完一次输入下一个之前要用空格隔开,这也限制了输入的路径名称中不能含有空格
sys.version ★★★ 获取当前使用的解释器的版本信息
sys.platform ★★ 当前平台名称,返回一个字符串类型的当前平台名称,windows平台统一返回win32
sys.exit(0) ★★★ 退出,退出时会返回一个异常:SystermExit 如果这个异常被捕获并且被接受后会执行接收后 的代码并且可以执行后边的代码如果这个异常没有被捕获,那么python解释器会自动退出,在这里 退出的时候如果里边有不是整形的其他数据类型,会进行异常输出,比如:
import sys
sys.exit('这里出错了')
了解★★
print(sys.api_version) 查看接口版本
print(sys.maxunicode) unicode的对照个数
1.OS模块:(主要用于和操作系统进行交互)
主要使用文件操作相关,对文件夹的操作:创建、删除、查看等
os.getcwd 获取当前的工作目录
os.chdir 切换工作目录 切换工作目录后可以直接对该目录下的文件进行操作,相当于shell下cd
os.curdir 返回当前目录,输出是一个'.'
os.pardir 返回当前目录的父目录字符串名,输出是一个'..'
os.environ 查看系统的环境变量,输出是一个元祖,元祖里面是一个字典类型
os.system("bash command") 运行shell命令,直接显示在Python中运行系统命令并在终端显示
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.mkdir('dirname') 生成单级目录:相当于shell中mkdir dirname
os.removedirs('dirname1/dirname2') 如目录为空,则删除,并递归到上一级目录,若也为空,则删除,以此类推
os.rmdir('dirname') 删除单级目录,如目录为空,则删除,并递归到上一级目录,若也为空,则删除,以此类推
os.remove() 删除一个文件
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.sep 输出操作系统特定的路径分隔符,win下为'\\',linux下为'\n'
os.linesep 输出当前平台使用的行终止符,win下为'\t\n',linux下为'\n'
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
2.os下的path模块(主要是对文件路径进行操作)★★★★★
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(path[,path[,...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略(也就是以后面的绝对路径为准)
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小(查看文件大小,单位是Bytes)
os.path.normcase('c:/windows\\system32\\') 在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符 转换为小写,并将所有斜杠转换为反斜杠 ,只在windows平台有用 输出结果:'c:\windows\system32\'
os.path.normpath('c://windows\\System32\\../Temp/') 规范化路径, 左斜杠变右斜杠,没有平台限制 输出结果为:'c:\windows\Temp'
到这里将可以把项目文件根目录添加到环境变量的几种方法总结一下(即在项目开发目录中放在conf下的settings文件):
第一种: 这种是直接写死的,不能够跨平台执行代码,尽量不适用这一种:
DB_PATH = r"D:\a\b\项目根目录\db\db.txt" LOG_PATH = r"D:\a\b\项目根目录\log\log.txt"
第二种:使用os模块下的path模块中的join函数来进行拼接,这种比较方便,可以跨平台:
首先获取当前操作文件所在路径/目录
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) (找到当前文件上上一级目录,在目录规范中即是项目的根目录的路径)
LOG_PATH2 = os.path.join(BASE_DIR,'log','log.txt') 这样也可将其添加到环境变量中并可以实现跨平台
第三种:使用os模块下的path模块中的normpath函数来规范化目录:
os.path.normpath(__file__) 规范化当前文件所在目录
os.path.normpath(__file__,'..','..','log','log.txt') 进行规范时遇到'..'会忘上级跳一个目录,和第二种的实现原理是一样的
3.Random模块(产生随机的数据类型)
random.random() #(0,1)----float类型 生成一个0到1的随机符点数: 0 <= n < 1.0
random.randint(1,3) #[1,3] 大于等于1且小于等于3之间的整数
random.randrange(1,3) #[1,3) 大于等于1且小于3之间的整数/ /从指定范围内,按指定基数递增的集合中 获取一个随机数。如:random.randrange(10, 100, 2),结果相当于从[10, 12, 14, 16, ... 96, 98]序列中获取一个随机数。random.randrange(10, 100, 2)在结果上与 random.choice(range(10, 100, 2) 等效
random.choice([1,'23',[4,5]]) #1或者23或者[4,5]之中选择一个(序列类型)
random.choices([1,2,3,4,5,6,7],k=2) 从列表中随机选择两个组成一个新列表,k的值可以指定(序列类型)
random.sample([1,'23',[4,5]],2) #列表元素任意2个组合(序列类型)
random.uniform(1,3) #大于1小于3的小数,如1.927109612082716 用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: a <= n <= b。如果 a <b, 则 b <= n <= a
item=[1,3,5,7,9]
random.shuffle(item) #打乱item的顺序,相当于"洗牌"
print(item)
简单应用:生成大小写字母和数字组成的验证码
随机验证码 长度自定义 包括0-9 A-Z a-z
def get_auth_code(length):
res = ""
for i in range(length):
a = random.randint(0,9)
b = chr(random.randint(65,90)) #使用大写英文字母对应的ascii码表中对应的数值
c = chr(random.randint(97,122)) #使用小写英文字母对应的ascii码表中对应的数值
s = random.choice([a,b,c])
res += str(s)
return res
print(get_auth_code(4))
4.shutil模块(高级的 文件、文件夹、压缩包 处理模块)
shutil模块中文件的拷贝和删除类功能
shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中
shutil.copyfile(src, dst) 拷贝文件
shutil.copymode(src, dst) 仅拷贝权限。内容、组、用户均不变
shutil.copystat(src, dst) 仅拷贝状态的信息,包括:mode bits, atime, mtime, flags
shutil.copy(src, dst) 拷贝文件和权限
shutil.copy2(src, dst) 拷贝文件和状态信息
shutil.ignore_patterns(*patterns) 递归的去拷贝文件夹
shutil.copytree(src, dst, symlinks=False, ignore=None) 递归的去拷贝文件夹
shutil.rmtree(path[, ignore_errors[, onerror]]) 递归的去删除文件
shutil.move(src, dst) 递归的去移动文件,它类似mv命令,其实就是重命名
shutil模块中的对文件的压缩功能
shutil.make_archive(base_name, format,...)
创建压缩包并返回文件路径,例如:zip、tar
各参数作用说明:
base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如 data_bak =>保存至当前路径
如:/tmp/data_bak =>保存至/tmp/
format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir: 要压缩的文件夹路径(默认当前目录)
owner: 用户,默认当前用户
group: 组,默认当前组
logger: 用于记录日志,通常是logging.Logger对象
shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的
注意:shutil只能对文件进行压缩,没有对文件进行解压的功能,解压的时候要使用对应的解压模块来进行解压
对应的解压模块为:zipfile和tarfile,根据压缩包的类型使用相应的解压模块进行解压
zipfile模块的使用:
zipfile压缩和解压
import zipfile
# 压缩
z = zipfile.ZipFile('laxi.zip', 'w') 打开文件
z.write('a.log') 要压缩的第一个文件
z.write('data.data') 要压缩的第二个文件
z.close() 关闭文件
# 解压
z = zipfile.ZipFile('laxi.zip', 'r') 打开文件
z.extractall(path='.') 提取文件
z.close() 关闭文件
tarfile模块的使用:
tarfile压缩和解压缩
import tarfile
# 压缩
>>> t=tarfile.open('/tmp/egon.tar','w') 打开文件
>>> t.add('/test1/a.py',arcname='a.bak') 添加第一个要压缩的文件
>>> t.add('/test1/b.py',arcname='b.bak') 添加第二个要压缩的文件
>>> t.close() 关闭文件
# 解压
>>> t=tarfile.open('/tmp/egon.tar','r') 打开文件
>>> t.extractall('/egon') 提取文件
>>> t.close() 关闭文件