标准库:不需要导入就可以直接使用的库,如getpath
第三方库:必须下载安装才能用。
sys和os是两个模块,通过.调用其下面的功能
sys.path
结合print(sys.path),表示调用sys模块中的path方法,打印Python存放的资源路径。
例:
模块名sys.py----
内容:import sys
print(sys.path)
导入模块的原理:导入的模块本身是以文件的形式存在的。默认的寻找路径是先从当前目录开始寻找.py文件,再从程序的全局变量(标准库或第三方库)中去找要导入的模块。
比如此处想导入sys模块,但因为本身就是名为sys.py的文件,而其内部又没定义所需要的path的方法,所以这里就意味着是导入自己,正常情况下,这样形式的调用是有问题且应报错的。
所以,切记,自己所取的文件名不应该和要导入的模块名一样。
print(sys.path) # 功能是打印Python的环境变量
打印结果展示的是python的全局环境变量,这些路径是python中存放的标准库或第三方库中的资源路径或python内部调用所需用的资源。其中,site-packages一般存放第三方库中的东西,标准库一般存放在site-packages上一级的lib中,表现为以.py为后缀的文件。
sys.argv
结合print(sys.argv),表示打印当前脚本的相对路径,也可传参。
如上图,print(sys.argv) # 用pycharm自己调用的时候打印结果是绝对路径
实际上print(sys.argv)打印的是相对路径,如上图:在cmd中找到当前脚本的位置,通过 python的打印命令打印出结果,结果为相对路径:[‘09 sys_mod.py’] 。
输入python ‘09 sys_mod.py’ 1 2 3 打印结果是:[‘09 sys_mod.py’,‘1’,‘2’,‘3’] 表示给此文件传了参数,则打印结果中含有参数的打印结果。
打印结果为一组列表,如果从这组列表中取出2这个数,需要通过这组列表的下标号[2]来将结果列表中的字符串2打印出来。操作如下:
1.pycharm中输入:
2.cmd中输入:
3.cmd中回车运行:
涉及到和系统交互的,使用os模块。
os.system
os.system(),结合windows的dir命令(DIR是DOS操作系统用来查看磁盘中文件的),可以将当前文件所在的目录下的文件都呈现出来,如下图:
以上方式只是呈现一种结果,所以可以利用变量赋值的方式将结果存下来并打印出来,如下图:
实际结果输出了一个0,想要的结果并没有存下来。
os.system()一调用,就输出了结果,执行完就没了,并没有保存。输出0代表的是命令执行成功与否,0代表命令执行成功,非0代表失败。
所以,os.system()只执行命令,不保存结果,需要保存结果,要调用os.popen()的方法。
os.popen
结合print(),直接使用os.popen(),打印的是内存的对象地址。不是所需结果,需要通过在此基础上继续调用.read()将存下来的结果读出来。
下图是通过继续调用.read()的方法实现将内容存储在一个临时的地方后,再将其读出来的目的。
os.mkdir
在当前文件所在目录下创建一个新目录。
见左侧目录结构中,并没有new_dir_1的目录,如图,在右侧通过调用os.mkdir()方法的方式,运行后可以新建一个目录,如下图:
以上是通过调用标准库中已有的模块来达成理想效果的方式。
除此之外,还可以自己写模块后,自己调用。
情况一:调用模块与被调用模块在同一目录下
1.在与调用模块同一目录下,自写一个可以运行的login.py文件:
2.在另一个文件09 sys_mod.py中,通过import导入该模块来调用:
情况二:调用模块与被调用模块不在同一目录下
如果调用模块与被调用模块不在同一目录下,则程序运行后,找不到那个被调用的模块。因为默认从该文件所在目录下寻找被调用模块,如果找不到,则会直接在全局变量中寻找。
解决方式1:
将被调用文件拷贝到site-packages(存放第三方库资源的目录)下,再调用。即,使程序在寻找全局变量时找到该调用模块。
解决方式2:
修改环境变量:加一个路径,使程序到new_dir目录下去寻找。