当前位置: 首页 > 后端技术 > Python

#持掌小手学Python#os库、sys库、getopt库和filecmp库,5000字长文带你玩转Python四大库

时间:2023-03-25 22:27:39 Python

sys库、os库、getopt库和filecmp库os库oslibrary提供基本的操作系统交互功能。这个库包含了大量与文件系统和操作系统相关的函数,可以通过dir函数查看。['DirEntry','F_OK','MutableMapping','O_APPEND','O_BINARY','O_CREAT','O_EXCL','O_NOINHERIT','O_RANDOM','O_RDONLY','O_RDWR','O_SEQUENTIAL','O_SHORT_LIVED'、'O_TEMPORARY'、'O_TEXT'、'O_TRUNC'、'O_WRONLY'、'P_DETACH'、'P_NOWAIT'、'P_NOWAITO'、'P_OVERLAY'、'P_WAIT'、'PathLike'、'R_OK'、'SEEK_CUR','SEEK_END','SEEK_SET','TMP_MAX','W_OK','X_OK','_Environ','__all__','__builtins__','__cached__','__doc__','__file__','__loader__','__name__','__package__','__spec__','_execvpe','_exists','_exit','_fspath','_get_exports_list','_putenv','_unsetenv','_wrap_close','abc','abort','access','altsep','chdir','chmod','close','closerange','cpu_count','curdir','defpath','device_encoding','devnull','dup','dup2','environ','error','execl','execle','execlp','execlpe','execv','execve','execvp','execvpe','extsep','fdopen','fsdecode','fsencode','fspath','fstat','fsync','ftruncate','get_exec_path','get_handle_inheritable','get_inheritable','get_terminal_size','getcwd','getcwdb','getenv','getlogin','getpid','getppid','isatty','kill','linesep','link','listdir','lseek','lstat','makedirs','mkdir','name','open','pardir','path','pathsep','pipe','popen','putenv','read','readlink','remove','removedirs','rename','renames','replace','rmdir','scandir','sep','set_handle_inheritable','set_inheritable','spawnl','spawnle','spawnv','spawnve','st','startfile','stat','stat_result','statvfs_result','strerror','supports_bytes_environ','supports_dir_fd','supports_effective_ids','supports_fd','supports_follow_symlinks','symlink','sys','system','terminal_size','times','times_result','truncate','umask','uname_result','unlink','urandom','utime','waitpid','walk','write']内容太多,通过截图更清楚。这些功能主要分为几类。路径操作:os.path分库,处理文件路径和信息;进程管理:启动系统中的其他程序;环境参数:获取系统软硬件信息等环境参数。os库路径操作os.path用于os库中提供操作和处理文件路径相关的函数。常用函数列表如下:函数名介绍os.path.abspath(path)返回绝对路径os.path.normpath(path)Canonicalpathstringformos.path.realpath(path)返回path的真实路径os.path.dirname(path)返回文件路径os.path.basename(path)返回文件名os.path.join(path1[,path2[,...]])Combinedirectoryandfilenamesintoapathos.path.exists(path)如果路径存在则返回True;如果路径不存在,则返回False。os.path.isfile(path)判断路径是否为文件os.path.isdir(path)判断路径是否为目录os.path.getatime(path)返回最新访问时间(浮点数秒)os.path.getmtime(path)返回文件最新修改时间os.path.getsize(path)返回文件大小,如果文件不存在则返回错误模块导入使用如下方法:importos.path#importos.pathasopvariate=os.path.abspath(__file__)print(variate)函数的参数都是path,传入时要特别注意原来的字符在字符串的应用中,也有这个问题区分绝对路径和相对路径。由于path相关的库比较简单,每个内容尝试一次就可以掌握,其他内容可以在手册中学习。os库进程管理这部分内容主要用于执行Python中的程序或命令。函数原型为:os.system(command)例如唤醒Python中的画板程序。os.system("c:\windows/system32/mspaint.exe")除了系统函数,还有一个os.exec函数族的相关知识。具体可以查看以下函数的用法:os.execl(path,arg0,arg1,...)os.execle(path,arg0,arg1,...,env)os.execlp(file,arg0,arg1,...)os.execlpe(file,arg0,arg1,...,env)os.execv(path,args)os.execve(path,args,env)os.execvp(file,args)os.execvpe(file,args,env)这些函数将执行一个新程序,替换当前进程。14.1.3os库运行环境相关参数environment参数顾名思义就是改变系统环境信息,也可以理解为Python运行环境相关的信息。环境变量可以通过以下属性获取:os.environ如果要获取操作系统类型,使用os.name,目前只有3个值:posix、nt、java函数部分,主要函数有:os.chdir(path):修改当前程序运行的路径;os.getcwd():返回程序运行的路径;os.getlogin():获取当前登录用户的名称;os.cpu_count():获取当前系统的CPU数量;操作系统。urandom(n):返回一个长度为n字节的随机字符串,用于加密操作。sys库这个库主要维护一些和Python解释器相关的参数变量和方法。14.2.1常用属性如下sys.argv获取命令行参数列表,第一个元素是程序本身。使用方法如下:importsysprint(sys.argv)接下来,通过控制台运行python程序时,需要携带参数。下面的代码312.py是python文件名,1、2、3是后缀的参数。python312.py123执行程序后,结果为:['312.py','1','2','3']首先是文件名,后面是传递的参数。sys.platform获取Python运行平台信息,结果比os.name更准确。sys.path获取PYTHONPATH环境变量的值,一般用作模块搜索路径。importsysprint(sys.path)sys.modules以字典的形式获取当前Python环境中所有导入的模块。sys.stdin、sys.stdout、sys.stderrsys.stdin、sys.stdout、sys.stderr变量包含对应于标准I/O流的流对象。importsys#标准输出,sys.stdout.write()的形式是没有'\n'的print()的形式。sys.stdout.write("hello")sys.stdout.write("world")sys.stdin标准输入,相当于input。sys.ps1和sys.ps2指定解释器的主要和次要提示。它们仅在解释器处于交互模式时才定义。具体测试如下:PS>pythonPython3.7.3(v3.7.3:xxxxxx,Mar252019,22:22:05)[MSCv.191664bit(AMD64)]onwin32Type"help","copyright","credits"或"license"获取更多信息。>>>importsys>>>sys.ps1'>>>'>>>sys.ps1="***"***print("hello")hello14.2.2common方法如下:sys.exit(n)退出Python程序,exit(0)表示正常退出。当参数不为零时,会引发SystemExit异常,可以在程序中捕获。参数也可以称为状态码。sys.getdefaultencoding(),sys.setdefaultencoding(),sys.getfilesystemencoding()sys.getdefaultencoding():获取系统当前的编码。有的博客写的默认是ascii,但是我本地默认是utf-8;sys.setdefaultencoding():设置系统的默认编码;sys.getfilesystemencoding():获取文件系统使用的编码,默认为utf-8。sys.getrecursionlimit(),sys.setrecursionlimit()获取和设置Python最大递归数的方法有很多,也是内存层面的知识。请在备注下方注明官方手册地址。14.3getopt库在控制台运行命令时,需要传递参数,比如安装第三方模块,使用的命令为:pipinstallxxxx-ihttp://xxxxxx在Python中可以实现类似的效果,getopt库提供了用于解析sys.argv以获取命令行参数的函数。库中通过dir提供的方法不多,如下:'do_longs','do_shorts','error','getopt','gnu_getopt','long_has_args','os','short_has_arg'关键函数是getopt.getopt()该函数原型如下:getopt(args,shortopts,longopts=[])args:程序的命令行参数,不包括程序文件名,一般传给sys.argv[1:];shortopts:定义-x或-x形式的短参数,增量为value:,例如xyz:m:,表示可以解析-x-y-z-d的参数;longopts:DEFINE--name,--name形式的long参数,increment=ofvalue。下面直接通过一个列表模拟sys.argv接收到的参数。importgetoptimportsyssys.argv=["demo.py","-i","-d","baidu.com","arg1"]opts,args=getopt.getopt(sys.argv[1:],"id:")print(opts)print(args)返回值由两个元素组成:第一个是(选项,值)对的列表;第二个是删除选项列表后剩余的程序参数列表(即args的尾随切片)。除了短参数,还有长参数。测试代码如下:my_str="demo.py-i-dbaidu.com--namebaiarg1"sys.argv=my_str.split()print(sys.argv)opts,args=getopt.getopt(sys.argv[1:],"id:",["name="])print(opts)print(args)运行代码后,参数解析成功。['demo.py','-i','-d','baidu.com','--name','bai','arg1'][('-i',''),('-d','baidu.com'),('--name','bai')]['arg1']如果程序异常,会出现参数解析错误,异常类为getopt.GetoptError。my_str="demo.py-i-dbaidu.com--namebaiarg1"sys.argv=my_str.split()print(sys.argv)opts,args=getopt.getopt(sys.argv[1:],"id:")print(opts)print(args)因为代码没有匹配长参数,所以出现错误:getopt.GetoptError:option--namenotrecognized14.4filecmplibrary这个库用来提供比较的功能目录和文件。文件比较函数包括cmp()和cmpfiles(),目录比较使用filecmp库中的dircmp类。14.4.1filecmp.cmp()、filecmp.cmpfiles()filecmp.cmp()用于比较两个文件的内容是否一致。如果文件内容匹配,函数返回True,否则返回False。importfilecmpx=filecmp.cmp("312.py","312.py")print(x)filecmp.cmpfiles()函数用于比较两个文件夹中的指定文件是否相等。函数原型如下:filecmp.cmpfiles(dir1,dir2,common[,shallow])参数dir1、dir2指定要比较的文件夹,参数common指定要比较的文件名列表。该函数返回一个包含3个列表元素的元组,分别代表匹配、不匹配和错误文件列表。坏文件是指文件不存在,或者文件不可读,或者你没有权限读取文件,或者由于其他原因无法访问文件。测试代码如下:importfilecmpx=filecmp.cmpfiles("../53","../54",["demo.py","demo1.py"])print(x)14.4.2为主看目录比较类构造函数就可以了。classfilecmp.dircmp(a,b,ignore=None,hide=None)参数说明如下:a,b:目录;ignore:关键字参数,要忽略的文件名列表,默认为filecmp.DEFAULT_IGNORES;hide:关键字参数,需要隐藏的文件名列表,默认为[os.curdir,os.pardir]。使用dircmp生成比较对象后,就可以得到各个属性的值了。你可以直接在这个页面上查看。14.5本篇博客总结本篇博客学习了Python中4个常用库的基本使用。这些库的存在大大提高了Python编码的效率。在许多情况下,您无法解决的编程问题可以用Python构建。库可以快速解决,这就是Python的魅力所在,希望对大家有所帮助。