《Python程序设计与算法基础教程》课件(含思政案例) Ch19 系统管理_第1页
《Python程序设计与算法基础教程》课件(含思政案例) Ch19 系统管理_第2页
《Python程序设计与算法基础教程》课件(含思政案例) Ch19 系统管理_第3页
《Python程序设计与算法基础教程》课件(含思政案例) Ch19 系统管理_第4页
《Python程序设计与算法基础教程》课件(含思政案例) Ch19 系统管理_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Ch19系统管理本章要点:

系统管理相关模块

目录、文件和磁盘的基本操作

执行操作系统命令和运行其他程序

获取终端的大小

文件压缩和解压缩configparser模块和配置文件资源下载提示2课件等资源:扫描封底的“课件下载”二维码,在公众号“书圈”中下载。素材(源码):扫描本书目录上方的二维码下载。讲解视频:扫描封底刮刮卡中的二维码,再扫描书中相应章节中(位于每章最前)的二维码,作为开源的补充阅读和学习资源。

案例研究:扫描封底刮刮卡中的二维码,再扫描书中相应章节中(位于每章最后)的二维码,可以在线学习。每章练习题:扫描封底刮刮卡中的二维码,再扫描每章习题部分的二维码,下载本章练习题电子版。

题库平台:教师登录网站(),联系客服开通教师权限系统管理相关模块os模块:与操作系统相关的函数os.path模块:与路径相关的函数glob模块:文件通配符操作tempfile模块:创建临时目录和文件shutil模块:与目录和文件操作相关的函数subprocess模块:用于执行其他程序目录、文件和磁盘的基本操作(1)创建目录使用os模块中的mkdir函数,可以创建目录,语法形式如下:os.mkdir(path,mode=0o777)#创建目录pathos.makedirs(path,mode=0o777)#创建目录path,以及所有的path中包含的上级目录>>>importos>>>os.makedirs(r'c:\pythonpa\ch19\temp\dir1')>>>os.mkdir(r'c:\pythonpa\ch19\dir2')目录、文件和磁盘的基本操作(1)临时目录和文件的创建使用tempfile模块中的函数,可以创建临时目录和文件,语法形式如下:tempfile.mkdtemp(suffix='',prefix='tmp',dir=None)#创建并返回临时目录tempfile.mkstemp(suffix='',prefix='tmp',dir=None,text=False)#创建并返回临时文件tempfile.TemporaryDirectory(suffix='',prefix='tmp',dir=None)#调用mkdtemp,创建临时目录tempfile.TemporaryFile(mode='w+b',buffering=None,encoding=None,newline=None,suffix='',prefix='tmp',dir=None)#调用mkstemp,创建临时文件tempfile.tempdir#设置临时目录对应的路径tempfile.gettempdir()#获取临时目录>>>importtempfile>>>tempfile.gettempdir()'C:\\Users\\jh\\AppData\\Local\\Temp>>>tempfile.mkstemp()(3,'C:\\Users\\jh\\AppData\\Local\\Temp\\tmpvl9ii99g')>>>tempfile.mkdtemp()'C:\\Users\\jh\\AppData\\Local\\Temp\\tmp3eoscx8h'目录、文件和磁盘的基本操作(2)切换当前工作目录使用os模块中的chdir函数,可以切换当前工作目录,语法形式如下:os.chdir(path)#切换当前工作目录为path目录内容列表使用os模块中的listdir函数,可以显示一个目录中的文件/子目录列表,语法形式如下:os.listdir(path='.')#返回指定目录path中的所有文件/子目录的列表>>>os.listdir(r'c:\pythonpa')['ch01','ch02','ch03','ch04','ch06','ch07','ch08','ch09','ch10','ch11','ch12','ch13','ch14','ch15','ch17','ch18','ch19','ch20','images']目录、文件和磁盘的基本操作(3)文件通配符和glob.glob函数使用glob模块中的glob函数,可以获取满足指定模式的文件/目录列表,语法形式如下:glob.glob(pathname)#返回满足指定模式pathname的文件/目录的列表遍历目录和os.walk函数使用os模块的walk函数,可以遍历指定的目录结构,语法形式如下:os.walk(top,topdown=True,onerror=None,followlinks=False)#返回目录结构的迭代器>>>importglob>>>os.chdir(r'c:\pythonpa\ch01')>>>glob.glob('*.py')['bigint.py','hello.py','hello1.py','hello_argv.py']【例19.1】输出指定目录的目录结构importre,os,os.pathdefls_py(top):for(dirname,subdirs,files)inos.walk(top):print('['+dirname+']')forfnameinfiles:print(os.path.join(dirname,fname))#测试代码if__name__=='__main__':path1=r'c:\pythonpa\ch17'ls_py(path1)目录、文件和磁盘的基本操作(4)判断文件/目录是否存在使用os.path模块函数exists,可以判断文件/目录是否存在,语法形式如下:os.path.exists(路径名)测试文件类型使用os.path模块函数,可以判断其类型,语法形式如下:os.path.isfile(path)#路径path是否为文件类型os.path.isdir(path)#路径path是否为目录类型os.path.islink(path)#路径path是否为链接类型os.path.ismount(path)#路径path是否为装载点类型os.path.isabs(path)#路径path是否为绝对路径>>>importos.path>>>os.path.exists(r'c:\abc')#假设c:\abc不存在。输出:False>>>os.path.isdir(r'c:\pythonpa')True目录、文件和磁盘的基本操作(5)文件的日期及其大小使用os.path模块函数,可以获取文件和目录的其它属性,语法形式如下:os.path.getatime(path)#返回上次访问时间os.path.getmtime(path)#返回上次修改时间os.path.getctime(path)#返回创建时间os.path.getsize(path)#返回指定路径path的大小>>>importos.path,time>>>os.path.getctime(r'c:\pythonpa\ch01')#结果为秒1641125757.7141457>>>time.strftime('%c',time.gmtime(os.path.getctime(r'c:\pythonpa\ch01')))'SunJan212:15:572022'

目录、文件和磁盘的基本操作(6)文件的删除使用os模块中的remove函数,可以删除指定文件,语法形式如下:os.remove(path)#删除指定文件path目录的删除使用os模块中的rmdir函数,可以删除指定目录,语法形式如下:os.rmdir(path)#删除指定目录path文件和目录复制、重命名和移动使用shutil模块中的下列函数,可以复制文件和目录,语法形式如下:shutil.copy(src,dst)#拷贝文件src到dst,如果dst为目录,则拷贝到dst目录下shutil.copy2(src,dst)#拷贝文件src到dst,如果dst为目录,则拷贝到dst目录下shutil.copytree(src,dst,symlinks=False,ignore=None)#拷贝目录树src到dstshutil.move(src,dst)#将文件/目录src移动到dst>>>os.remove(r'c:\pythonpa\temp\1.txt')>>>os.rmdir(r'c:\pythonpa\temp')>>>importshutil>>>shutil.copytree(r'c:\pythonpa\ch20\temp',r'c:\pythonpa\ch20\temp1')目录、文件和磁盘的基本操作(7)磁盘的基本操作使用shutil模块中的disk_usage函数,可以获取磁盘空间的使用情况,语法形式如下:shutil.disk_usage(path)#返回指定path上的磁盘的空间使用情况:(总数,已用,可用)>>>importshutil;shutil.disk_usage(r'c:')usage(total=254721126400,used=236444225536,free执行操作系统命令和运行其他程序1os.system函数使用os模块中的system函数,可以在Python程序中执行操作系统的命令和脚本,或运行其它程序,语法形式如下:os.system(command)#执行操作系统命令,返回命令执行结果的返回代码os.popen函数使用os模块中的popen函数,可以在Python程序中执行操作系统的命令和脚本,语法形式如下:os.popen(...)#执行操作系统命令,返回打开的管道(相当于文件)>>>os.system('dir')

#执行操作系统命令>>>os.system('notepad.exe')#执行程序,启动记事本>>>os.popen(r'dirc:\pythonpa')<os._wrap_closeobjectat0x000001BB25F71048>>>>list(os.popen(r'dirc:\pythonpa'))执行操作系统命令和运行其他程序2subprocess模块创建子进程、运行外部程序、连接到其输入/输出/错误管道、获取其返回值如果需要与所创建的子进程进行高级通信,例如,传递输入参数,可以使用subprocess模块的Popen对象构造函数>>>importsubprocess>>>subprocess.call(['notepad.exe',r'c:\pythonpa\ch01\hello.py'])#在记事本中打开指定文件>>>subprocess.check_output(r'python-h',shell=True)b"usage:python[option]...[-ccmd|-mmod|file|-][arg]...\r\n……(略)>>>importsubprocess>>>p=subprocess.Popen(['dir'],shell=True,stdout=subprocess.PIPE,stdin=subprocess.PIPE)>>>stdoutdata,stderrdata=municate()>>>stdoutdatab'\xc7\xfd\xb6\xaf\xc6\xf7C\xd6\xd0\xb5\xc4\xbe\xed\xca\xc7Windows\r\n……(略)获取终端的大小通过os或shutil模块的get_terminal_size函数,可以获取终端的大小,以方便输出内容的格式化操作【例19.2】获取终端的大小示例importos,shutildefget_term_size_test():sz=shutil.get_terminal_size()print('窗口大小:',sz)foriinrange(sz.lines):print('*'*sz.columns)if__name__=='__main__':get_term_size_test()文件压缩和解压缩(1)使用shutil模块的make_archive和unpack_archive等函数,实现文件的压缩和解压缩功能shutil模块支持的压缩和解压缩格式>>>importshutil>>>shutil.get_archive_formats()[('bztar',"bzip2'edtar-file"),('gztar',"gzip'edtar-file"),('tar','uncompressedtarfile'),('xztar',"xz'edtar-file"),('zip','ZIPfile')]>>>shutil.get_unpack_formats()[('bztar',['.tar.bz2','.tbz2'],"bzip2'edtar-file"),('gztar',['.tar.gz','.tgz'],"gzip'edtar-file"),('tar',['.tar'],'uncompressedtarfile'),('xztar',['.tar.xz','.txz'],"xz'edtar-file"),('zip',['.zip'],'ZIPfile')]文件压缩和解压缩(2)make_archive()和文件压缩make_archive()函数的基本格式为:make_archive(base_name,format,root_dir=None,base_dir=None,verbose=0,dry_run=0,owner=None,group=None,logger=None)>>>shutil.make_archive('pybak','zip',root_dir=r'c:\pythonpa',base_dir=r'c:\tmp')'c:\\tmp\\pybak.zip'文件压缩和解压缩(2)unpack_archive()函数和文件解压缩unpack_archive()函数的基本格式为:unpack_archive(filename,extract_dir=None,format=None)>>>importshutil,os>>>shutil.unpack_archive(r'c:\tmp\pybak.zip',extract_dir=r'c:\tmp')>>>os.listdir(r'c:\tmp')configparser模块和配置文件configparser模块用于读取和写入配置文件INI文件及INI文件格式通常位于应用程序的配置文件文件夹中,用于保存应用程序的各种配置信息ConfigParser对象和INI文件操作【例19.3】读取和写入INI文件示例(configparser.py)importconfigparserdefini_create():#创建INI文件config=configparser.ConfigParser()config['SystemInfo']={'port':'8080'}config['GameInfo']={'level':1,'scores':0}withopen('example.ini','w')asconfigfile:config.write(configfile)defini_read_write():#读取和设置INI文件config=configparser.ConfigParser()config.read('example.ini')config['SystemInfo']['port']='8088'config.set('GameInfo','scores','1000')foriteminconfig.items('GameInfo'):print(item)withopen('example.ini','w')asconfigfile:config.write(configfile)if__name__=='__main__':ini_create()#创建INI文件ini_read_write()#读取和设置INI文件应用举例1(病毒扫描)病毒扫描程序根据文件是否包含病毒特征码来判断文件是否感染特定的病毒。病毒特征码是由计算机安全专家识别的特定病毒中出现的字节序列,在未感染的文件中不大可能出现,因而可以作为病毒存在的证据实现一个简单的病毒扫描程序的思维和流程如下:(1)定义病毒特征码字典signatures。使用字典储存病毒名称及其对于病毒特征码的映射关系。(2)定义病毒扫描递归函数scan(path,sig)。递归访问目录path中的所有文件(包括子文件夹中的文件)基本情况:如果path是文件,则检查其是否存在病毒特征码,并打印出结果信息递归情况:如果path是目录,则递归调用scan(path,sig)【例19.4】病毒扫描器示例程序(virus_scanner.py)importosvirus_sig={'lovebug':'xy5020g2h1azzx33','Blaster':'fdp3014k1ks6hgbc'}defscan(path,virus_sig):"""扫描文件夹path及其子文件夹中的所有文件,判断是否包含特征码"""ifos.path.isfile(path):#基本情况,打开文件,查找特征码

infile=open(path)content=infile.read()infile.close()forvirusinvirus_sig:#检查文件内容是否包含特征码

ifcontent.find(virus_sig[virus])>=0:print('{0},foundvirus{1}'.format(path,virus))return

#递归情况:递归调用

foriteminos.listdir(path):fullpath=os.path.join(path,item)scan(fullpath,virus_sig)if__name__=='__main__':scan('test',virus_sig)(1)本例使用了简单的非真实的病毒特征码来演示。实际病毒特征码比较复杂,一般存在于二进制文件中。(2)使用os模块的os.listdir(path)函数可以返回目录path中的所有文件和子文件夹;os.path.isfile(path)可以判断path是否为文件;os.path.join(path,item)可以合并成一个新的路径并返回应用举例2(文件目录树)实现一个遍历并输出目录结构的程序的思维和流程如下:(1)定义递归函数tree(path,level)。递归访问目录path中的所有文件和子文件夹。基本情况:如果path是文件,则输出文件名;递归情况:如果path是文件夹,则输出文件夹,并递归调用tree(path,level)。(2)使用level参数表示递归的层,即文件夹的层。输出文件或文件夹的缩进由level决定【例19.5】文件目录树示例程序(path_tree.py)importosdeftree(path,level):#如果路径不存在,则返回Noneifnotos.path.exists(path):returnNone#递归基本情况:如果是文件,则输出文件名

ifos.path.isfile(path):fileName=os.path.basename(path)print('\t'*level+'├─'+fileName)elifos.path.isdir(path):#递归情况

print('\t'*level+'├─'+path)foriteminos.listdir(path):tree(os.path.join(path,item),level+1)if__name__=='__main__':tree(r"c:\pythonpa",0)本章小结实验和习题实例19.1~实例19.5复习题填空题思考题案例研究一:简易图形用户界面压缩软件本章的案例研究1通过一个简易图形用户界面压缩软件的设计与实现,深入了解使用wxPython和Python系统管理包开发使用系统应用程序的思维和流程案例研究的解题思路和源代码等以电子版形式提供,具体请扫描教程中的二维码简易图形用户界面压缩软件概述本案例实现了一个简易图形用户界面压缩软件。程序启动时,左侧显示本地计算机文件系统的树形结构;双击目录或zip格式压缩文件,在右侧列表框中显示子目录或压缩文件中的内容解压文件的操作如下:在左侧树形目录中,选择要解压的zip文件,然后单击【解压】按钮,提示用户选择解压目标文件夹,并解压到目标文件夹压缩文件的操作如下:在右侧列表中,使用鼠标选择多个文件或文件夹(可以使用Ctrl和Shift辅助键),然后单击【压缩】按钮,提示用户选择输入目标压缩文件名,并压缩所选择的内容到指定的文件中简易图形用户界面压缩软件简易图形用户界面压缩软件的主要功能(1)在左侧树形结构中显示系统文件目录结构。wx.GenericDirCtrl实现该功能(2)在右侧列表框中(调用populate_channel_list()方法);如果是zip文件,则调用data.get_zipfile_list(path),查询zip文件path的内容,并显示在右侧列表框中(调用populate_channel_list()方法)(3)解缩文件。用户在左侧树形目录中,选择要解压的zip文件,然后单击【解压】按钮,提示用户选择解压目标文件夹,并解压到目标文件夹(调用data.uncompress(spath,tpath))(4)压缩文件。用户在右侧列表中,使用鼠标选择多个文件或文件夹(可使用Ctrl和Shift辅助键),然后单击【压缩】按钮,提示用户选择输入目标压缩文件名,并压缩所选择的内容到指定的文件中(调用press(files,spath,tpath))【例CS19A.1】简易图形用户界面压缩软件界面模块ui.py【例CS19A.2】简易图形用户界面压缩软件分析和处理模块data.py【例CS19A.3】简易图形用户界面压缩软件主模块simplezip.py案例研究二:使用scikit-learn进行机器学习本章的案例研究2通过scikit-learn数据分析和处理库的安装和基本使用,帮助读者了解使用Python进行机器学习的基本方法。读者可以举一反三,进一步探索与自己专业相关领域的库的安装和使用方法案例研究的解题思路和源代码等以电子版形式提供,具体请扫描教程中的二维码机器学习概述1机器学习研究和构建的是一种特殊算法(而非某一个特定的算法),能够让计算机自己在数据中学习从而进行预测。机器学习属于人工智能范畴,而深度学习则属于机器学习范畴。机器学习的基本思路如下。(1)把现实生活中的问题抽象成数学模型。(2)利用数学方法对这个数学模型进行求解。(3)评估这个数学模型。(4)利用这个数学模型进行预测机器学习概述2根据训练方法,机器学习大致可以分为以下3大类。(1)监督式学习:监督式学习接受已知的训练数据集(包含预测变量和响应变量),然后训练模型,使模型能够对新输入数据的响应做出合理的预测。常见的监督式学习包括分类模型和回归模型。例如,通过以前标记为正常邮件和垃圾邮件的电子邮件训练数据集,训练一个分类模型,以对新的邮件进行分类;通过住房历史销售数据(即地理位置、楼层、面积以及售价等)的训练数据集,训练一个回归模型,以对新住房的销售价格进行预测。(2)无监督学习:无监督学习接受的训练数据集没有“正确答案”。无监督学习的任务是从给定的数据集中挖掘出潜在的结构。聚类是一种常见的无监督学习,可以通过探索性数据分析发现数据中隐藏的模式或分组。聚类分析的应用包括基因序列分析、市场调查和对象识别。例如,将一组给定猫和狗的照片传送给机器,而且不给这些照片标记任何标签,但是希望机器能够将这些照片分类。(3)强化学习:强化学习更接近生物学习的本质,因此有望获得更高的智能。强化学习关注的是智能体如何在环境中采取一系列行为,从而获得最大的累积回报。通过强化学习,一个智能体应该知道在什么状态下应该采取什么行为机器学习概述3在实际应用中,机器学习一般分为以下7个步骤。(1)收集数据:收集要用于机器学习的数据,也可以采用互联网的公开数据集。(2)数据准备:如果需要,对数据进行清洗。然后把数据拆分为训练集、验证集、测试集,用于后面的训练、验证和评估工作。(3)选择一个模型:根据具体的应用选择合适的模型。研究人员和数据科学家多年来创造了许多模型,有些适合于图像数据,有些适合于序列(如文本或音乐)等。(4)训练:计算机在训练集进行训练。(5)评估:在训练完成后就可以评估模型是否有用。这是之前为什么预留验证集和测试集的原因所在。评估的指标主要有准确率、召回率、F值等。(6)参数调整:在完成评估后,用户可能希望了解是否可以以任何方式进一步改进训练。可以通过调整参数来做到这一点。当进行训练时,会隐含地假设了一些参数,用户可以通过人为调整这些参数让模型表现得更出色。(7)预测(开始使用模型):基于训练好的模型,对未知的新的数据进行预测scikit-learn库概述开源的基于Python语言的机器学习工具包,它通过NumPy、SciPy和Matplotlib等Python数值计算库实现了几乎所有主流机器学习算法sklearn的官网地址为/,中文社区为scikit-learn常用的模块包括分类、回归、聚类、降维、模型选择、预处理等。当安装Anaconda科学计算环境时,会自动安装NumPy、SciPy、Matplotlib和scikit-learn等库本案例将基于Anaconda科学计算环境的JupyterNotebook也可以使用pip命令安装scikit-learn,命令形式为pipinstallscikit-learnK-最近邻模型(鸢尾花分类)分类技术可以用于预测离散的响应,例如,电子邮件是不是垃圾邮件,肿瘤是恶性还是良性如果输出只有两个目标类别,那么可以将学习任务称为二分类问题;如果有两个以上的目标类,那么将学习任务称为多分类问题用于实现分类的常用算法包括支持向量机(SupportVectorMachine,简称SVM)、提升(boosted)决策树和袋装(bagged)决策树、K-最近邻、朴素贝叶斯(NaïveBayes)、判别分析、逻辑回归和神经网络等K-最近邻模型(KNearestNeighbors,简称KNN)是分类技术中最简单的方法之一,其基本思想是给定一个训练数据集,对于新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中鸢尾花数据集著名的机器学习数据集,其中包含了150条测量数据,包含3个类别(versicolor、setosa和virginica),每个类别各有50个样本,包含鸢尾花的一些测量数据,即花瓣(petal)的长度和宽度以及花萼(sepal)的长度和宽度通过sklearn的datas

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论