|
文章目录os模块popen()listdir()getcwd()chdir()environos模块属性1、name获取系统标识2、sep获取路径分割符号3、linesep获取系统的换行符号4、其它的一些方法os模块(文件操作)新建/删除shutil模块复制/移动os.path路径模块os模块os是“operatingsystem”的缩写,os模块提供各种Python程序与操作系统进行交互的接口,使用os模块,一方面可以方便地与操作系统进行交互,另一方面页可以极大增强代码的可移植性importos1#system()在python中执行系统命令相当于运行shell命令,直接显示。在linux里面执行没什么问题,但是在Windows里面,由于编码是GBK,导致中文不能正常显示。Windows里面可以使用popen来操作os.system("ifconfig")#linux#os.system("ipconfig")windows#os.system("rm-rfceshi.txt")123Windows里面乱码popen()执行系统命令返回对象,通过read方法读出字符串。可以自动转换编码os.popen()方法用于从一个命令打开一个管道。在Unix,Windows中有效语法popen()方法语法格式如下:os.popen(command[,mode[,bufsize]])1参数command–使用的命令。mode–模式权限可以是‘r’(默认)或‘w’。bufsize–指明了文件需要的缓冲大小:0意味着无缓冲;1意味着行缓冲;其它正值表示使用参数大小的缓冲(大概值,以字节为单位)。负的bufsize意味着使用系统的默认值,一般来说,对于tty设备,它是行缓冲;对于其它文件,它是全缓冲。如果没有改参数,使用系统的默认值。返回值返回一个文件描述符号为fd的打开的文件对象obj=os.popen("ipconfig")print(obj)print(obj.read())123listdir()列出指定目录下的所有文件和目录,包括隐藏文件,并以列表方式打印***lst=os.listdir()print(lst)12可以指定目录:linux下getcwd()获取当前工作目录绝对路径,即当前python脚本工作的目录绝对路径***“”“/mnt/hgfs/python32_gx/day16"”"path#路径res=os.getcwd()print(res)12#获取当前python脚本的路径+文件名***print(__file__)1linux下chdir()改变当前脚本工作目录;相当于shell下cdos.chdir("/home/wangwen/mywork")os.system("touch2.txt")12environ获取或修改环境变量[windows](1)右键qq属性找路径(2)右键我的电脑属性->高级系统设置->环境变量->path打开环境变量添加对应路径(3)cmd=>QQScLauncher[linux](1)在家目录中创建个文件夹,里面创建个文件wangwen,写入ifconfig(2)增加wangwen的可执行权限chmod777wangwen测试一下sudo./wangwen(3)添加环境变量在os.environ[“PATH”]中拼接wangwen所有的绝对路径(4)os.system(“wangwen”)总结:环境变量path的好处是,让系统自动的找到该命令的实际路径进行执行;print(os.environ["PATH"])environ({'PATH':'/home/wangwen/bin:/home/wangwen/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin','XAUTHORITY':'/home/wangwen/.Xauthority','XMODIFIERS':'@im=fcitx','XDG_DATA_DIRS':'/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop','GDMSESSION':'ubuntu','MANDATORY_PATH':'/usr/share/gconf/ubuntu.mandatory.path','GTK_IM_MODULE':'fcitx','DBUS_SESSION_BUS_ADDRESS':'unix:abstract=/tmp/dbus-5JjXbZOpKC','DEFAULTS_PATH':'/usr/share/gconf/ubuntu.default.path','XDG_CURRENT_DESKTOP':'Unity','UPSTART_SESSION':'unix:abstract=/com/ubuntu/upstart-session/1000/1603','QT4_IM_MODULE':'fcitx','QT_LINUX_ACCESSIBILITY_ALWAYS_ON':'1','LOGNAME':'wangwen','JOB':'unity-settings-daemon','PWD':'/mnt/hgfs/python32_gx/day16','IM_CONFIG_PHASE':'1','PYCHARM_HOSTED':'1','LANGUAGE':'zh_CN:zh','PYTHONPATH':'/home/wangwen/pylianxi','SHELL':'/bin/bash','GIO_LAUNCHED_DESKTOP_FILE':'/home/wangwen/.local/share/applications/jetbrains-pycharm-ce.desktop','INSTANCE':'','GTK2_MODULES':'overlay-scrollbar','UPSTART_INSTANCE':'','GNOME_DESKTOP_SESSION_ID':'this-is-deprecated','GTK_MODULES':'gail:atk-bridge:unity-gtk-module','CLUTTER_IM_MODULE':'xim','XDG_SESSION_PATH':'/org/freedesktop/DisplayManager/Session0','COMPIZ_BIN_PATH':'/usr/bin/','SESSIONTYPE':'gnome-session','XDG_SESSION_DESKTOP':'ubuntu','SHLVL':'0','COMPIZ_CONFIG_PROFILE':'ubuntu','UPSTART_JOB':'unity7','QT_IM_MODULE':'fcitx','XDG_CONFIG_DIRS':'/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg','GNOME_KEYRING_CONTROL':'','LANG':'zh_CN.UTF-8','XDG_SEAT_PATH':'/org/freedesktop/DisplayManager/Seat0','XDG_SESSION_TYPE':'x11','XDG_SESSION_ID':'c2','DISPLAY':':0','GDM_LANG':'zh_CN','PYTHONIOENCODING':'UTF-8','XDG_GREETER_DATA_DIR':'/var/lib/lightdm-data/wangwen','UPSTART_EVENTS':'xsessionstarted','SESSION':'ubuntu','GPG_AGENT_INFO':'/home/wangwen/.gnupg/S.gpg-agent:0:1','DESKTOP_SESSION':'ubuntu','USER':'wangwen','GIO_LAUNCHED_DESKTOP_FILE_PID':'12487','QT_ACCESSIBILITY':'1','SSH_AUTH_SOCK':'/run/user/1000/keyring/ssh','XDG_SEAT':'seat0','PYTHONUNBUFFERED':'1','QT_QPA_PLATFORMTHEME':'appmenu-qt5','XDG_RUNTIME_DIR':'/run/user/1000','XDG_VTNR':'7','HOME':'/home/wangwen','GNOME_KEYRING_PID':''})"""添加环境路径os.environ["PATH"]+=":/home/wangwen/mywork"os.system("wangwen")123456789101112131415161718192021222324这种方式,脚本执行完就消失了,只是局部变量,不能真正修改系统的环境变量Windows获取环境变量Linux下os模块属性1、name获取系统标识linux,mac->posixwindows->ntprint(os.name)122、sep获取路径分割符号linux,mac->/window->\***print(os.sep)123、linesep获取系统的换行符号linux,mac->\nwindow->\r\n或\nprint(repr(os.linesep))14、其它的一些方法os.chdir(“dirname”)改变当前脚本工作目录;相当于shell下cdos.curdir返回当前目录’.’)os.pardir获取当前目录的父目录字符串名:(’…’)os.makedirs(‘dirname1/dirname2’)可递归创建目录12345os.removedirs(‘dirname1’)若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推os.removedirs()是python标准库os的方法,可以用来递归删除多级目录(什么是递归删除,该怎么理解,可参考下方实例代码及解析),注意,要删除的必须是空目录(空文件夹)。如果要删除的目录不存在,python将抛出FileNotFoundErroros.mkdir(‘dirname’)生成单级目录;相当于shell中mkdirdirnameos.rmdir(‘dirname’)删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdirdirnameos.remove()删除一个文件os.rename(“oldname”,“newname”)重命名文件/目录1234os.stat(‘path/filename’)获取文件/目录信息1os.linesep输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"os.pathsep输出用于分割环境变量文件路径的字符串win下为;,Linux下为:importsys#打印环境变量路径#print(sys.path)#打印参数,以列表方式返回,每个元素都是字符串print(sys.argv)python中argv的用法sys.argv可以用来获取命令行参数,其中sys.argv[0]为脚本名,即python文件名,列表中的其他值为传入的参数值,一般定义方式为script,arg1,arg2,arg3=argv这种方式显式地定义了参数名称和参数数量,也可以不显式定义argv的参数,即直接往命令行里面传参数,然后从argv[]列表中取出参数即可,传参#命令行界面pythontest.pyarg1arg2arg3则在agrv的列表中,参数依次为argv[0]是test.py,argv[1]是arg1,依次类推取参数内容print('参数个数:',len(sys.argv),'个参数')print('参数列表:',str(sys.argv))1234567891011121314151617181920212223执行脚本后面跟参数,打印出一个列表,第一次参数是脚本名称,第二各参数以及之后,都是携带的参数os模块(文件操作)新建/删除importosos.chdir("/home/wangwen/mywork")#--os模块具有新建/删除/#os.mknod创建文件,为的是在所有系统中创建文件,但是在Windows里面的不能兼容#os.mknod("1.txt")#os.remove删除文件,这个在Windows里面可以用#os.remove("1.txt")#os.mkdir创建目录(文件夹)Windows里面可用#os.mkdir("ceshi111")12345678910111213#os.rmdir删除目录(文件夹)只能删除空目录#os.rmdir("ceshi111")#os.rename对文件,目录重命名#os.rename("2.txt","3.txt")#os.makedirs递归创建文件夹#os.makedirs("a/b/c/d/e/f")#os.removedirs递归删除文件夹(空文件夹)#os.removedirs("a/b/c/d/e/f")1234567891011shutil模块复制/移动shutil是python中的高级文件操作模块,与os模块形成互补的关系,os主要提供了文件或文件夹的新建、删除、查看等方法,还提供了对文件以及目录的路径操作。shutil模块提供了移动、复制、压缩、解压等操作,恰好与os互补,共同一起使用,基本能完成所有文件的操作。是一个非常重要的模块。importshutil#copyfileobj(fsrc,fdst[,length=16*1024])复制文件(length的单位是字符(表达一次读多少字符/字节))"""fp_src=open("3.txt",mode="r",encoding="utf-8")fp_dst=open("4.txt",mode="w",encoding="utf-8")shutil.copyfileobj(fp_src,fp_dst)"""#copyfile(src,dst)#单纯的仅复制文件内容,底层调用了copyfileobj#shutil.copyfile("4.txt","5.txt")#copymode(src,dst)#单纯的仅复制文件权限,不包括内容(虚拟机共享目录都是默认777)"""注意:要先有两个文件才可以,不会默认创建"""shutil.copymode("4.txt","5.txt")#copystat(src,dst)#复制所有状态信息,包括权限,组,用户,修改时间等,不包括内容shutil.copystat("4.txt","5.txt")#copy(src,dst)#复制文件权限和内容shutil.copy("5.txt","6.py")#copy2(src,dst)#复制文件权限和内容,还包括权限,组,用户,时间等shutil.copy2("5.txt","7.py")#copytree(src,dst)#拷贝文件夹里所有内容(递归拷贝)。#shutil.copytree("lianxi","lianxi2")#rmtree(path)#删除当前文件夹及其中所有内容(递归删除),目录中有文件也能递归删除,不能删除文件否则报错#shutil.rmtree("lianxi2")1234567891011121314151617181920212223242526272829303132333435#move(path1,paht2)#移动文件或者文件夹,权限也附带移动#shutil.move("7.py","lianxi/888.php")shutil.move("7.py","/888.php")123os.path路径模块importospathvar="/home/wangwen/mywork/ceshi.py"pathvar=__file__#basename()返回文件名部分res=os.path.basename(pathvar)print(res)1234567#dirname()返回路径部分res=os.path.dirname(pathvar)print(res)12basename和dirname在框架django和flask中使用比较多#split()将路径拆分成单独的路径部分和文件名部分组合成一个元组print(os.path.split(__file__))12#os.sep将多个路径和文件组成新的路径可以自动通过不同的系统加不同的斜杠linux/windows\***path1="home"path2="wangwen"path3="mywork"pathvar=path1+os.sep+path2+os.sep+path3print(pathvar)12345#用join改造,路径分隔符会根据系统自动添加,不用自己手动加了path_new=os.path.join(path1,path2,path3)print(path_new)12splitext()将路径分割为后缀和其他部分(了解)方便取文件后缀,以最后一个.后面为后缀可以使用str的split方法根据.分隔取代pathvar="/home/wangwen/mywork/ceshi.py"print(os.path.splitext(pathvar))print(pathvar.split(".")[-1])123os.path.realpath()1Python中的方法用于通过消除路径中遇到的任何符号链接来获取指定文件名的规范路径。getsize()获取文件的大小#获取路径#pathvar=os.path.dirname(__file__)#方法一pathvar=os.getcwd()#方法二path_new=os.path.join(pathvar,"2.py")print(path_new)1234#计算文件大小,得到的是字节,int类型res=os.path.getsize(path_new)print(pathvar)res=os.path.getsize("/mnt/hgfs/python32_gx/day14")print(res)1234isdir()检测路径是否是一个文件夹返回True或者False***res=os.path.isdir("/mnt/hgfs/python32_gx/day14")print(res)12isfile()检测路径是否是一个文件***res=os.path.isfile("/mnt/hgfs/python32_gx/day16/1.py")print(res)12islink()检测路径数否是一个链接res=os.path.islink("/home/wangwen/mywork/1122.py")print(res)12getctime()[windows]文件的创建时间,[linux]权限的改动时间(返回时间戳)importtimeres=os.path.getctime("/home/wangwen/mywork/4.txt")12getmtime()获取文件最后一次修改时间(返回时间戳)res=os.path.getmtime("/home/wangwen/mywork/4.txt")1getatime()获取文件最后一次访问时间(返回时间戳)res=os.path.getatime("/home/wangwen/mywork/4.txt")print(res)print(time.ctime(res))123exists()检测指定的路径是否存在,文件目录都可以检测***res=os.path.exists("/home/wangwen/mywork/4.txt")#res=os.path.exists("4.txt")print(res,"")123isabs()检测一个路径是否是绝对路径res=os.path.isabs("2.py")print(res)12abspath()将相对路径转化为绝对路径,前提是该文件要在当前python的工作目录,或者切换目录后的目录。不然计算出的绝对路径是错误的res=os.path.abspath("2.py")print(res)12pathvar="2.py"ifnotos.path.isabs(pathvar):abs_path=os.path.abspath("2.py")print(abs_path)1234
|
|