作者:韩信子@ShowMeAI教程地址:http://www.showmeai.tech/tuto...本文地址:http://www.showmeai.tech/article-detail/86免责声明:版权所有,转载请联系平台及作者并注明出处1.Python文件目录操作及OS模块在实际开发中,我们经常需要对文件进行读取、遍历、修改等操作,通过python标准构建-inos模块可以简洁高效的方式完成这些操作。常用操作整理如下:文件夹操作:包括文件夹创建、修改(重命名/移动)、查询(查看、遍历)、删除等。文件操作:包括创建、修改、读取、删除文件。路径操作:文件夹或文件的路径操作,如绝对路径、文件名和路径拆分、扩展名拆分等。要完成文件和目录操作,首先要导入相应的os模块,代码如下:importos2.本地pythontest目录作为demo目录。该目录下当前文件如下:test│test.txt└─test-1test-1.txttest和test-1为文件夹,test.txt和test-1.txt为文件。(1)查询操作在linux中,我们使用ls/pwd/cd来完成查询和切换路径等操作。对应的python操作方法如下:listdir:文件和目录列表getcwd:获取当前目录chdir:更改目录stat:文件和目录基本信息walk:递归遍历目录>>>os.chdir("./pythontest")#更改目录>>>os.getcwd()#获取当前目录'/Users/ShowMeAI/pythontest'>>>os.listdir("test")#文件和目录列表,相对路径['test-1','test.txt']>>>os.listdir("/Users/ShowMeAI/test")#文件和目录列表,绝对路径['test-1','test.txt']>>>os.stat("test")#获取目录信息os.stat_result(st_mode=16877,st_ino=45805684,st_dev=16777221,st_nlink=11,st_uid=501,st_gid=20,st_size=352,st_atime=1634735551,st_mtime=1634735551,st_ctime=1634735551)>>>os.stat("test/test.txt")#获取文件信息os.stat_result(st_mode=33188,st_ino=45812567,st_dev=16777221,st_nlink=1,st_uid=501,st_gid=20,st_size=179311,st_atime=1634699986,st_mtime=1634699966,st_ctime=1634699984)其中stat函数返回文件或目录的基本信息如下:st_mode:inode保护模式st_ino:inode节点号st_dev:inode所在设备。st_nlink:inode的链接数。st_uid:所有者的用户ID。st_gid:所有者的组ID。st_size:普通文件的字节大小st_atime:上次访问的时间。st_mtime:最后一次修改的时间。st_ctime:创建时间。在日常使用中,我们一般使用st_size、st_ctime和st_mtime来获取文件大小、创建时间和修改时间。另外,我们看到输出的时间是秒数。我在这里提一下日期转换处理。(2)遍历操作walk函数递归遍历目录,返回root、dirs、files,分别对应当前遍历的目录、子目录和本目录下的文件。data=os.walk("test")#遍历test目录forroot,dirs,filesindata:#递归遍历并输出print("root:%s"%root)fordirindirs:print(os.path.join(root,dir))forfileinfiles:print(os.path.join(root,file))(3)创建操作mkdir:创建一个新的单一目录,如果目录路径中的父目录不存在,创建会失败makedirs:创建多个目录,如果目录路径中不存在父目录,则自动创建>>>os.mkdir("new")>>>os.mkdir("new1/new1-1")#父目录不存在,报错Traceback(mostrecentcalllast):File"",line1,inFileNotFoundError:Thesystemcannotfindthepathspecified.:'new1/new1-1'>>>os.makedirs("new1/new1-1")#父目录不存在,会自动创建>>>os.listdir("new1")['new1-1'](4)删除操作rmdir:删除单个空目录,如果目录不为空,会报错removedirs:根据路径递归删除多级空目录,如果目录不为空,会报错>>>os.rmdir("new1")#如果目录不为空,Traceback(mostrecentcalllast):File"",line1,inOSError:Thedirectory不是空的。:'new1'>>>os.rmdir("new1/new1-1")>>>os.removedirs("new1/new1-1")#删除多级空目录>>>os.listdir(".")['new']由于删除空目录的限制,最好使用shutil模块中的rmtree函数来删除非空目录及其文件。(5)修改操作重命名:重命名目录或文件,修改文件或目录的路径(即移动操作)。如果目标文件目录不存在,则会报错。renames:重命名目录或文件,如果目标文件目录不存在则自动创建>>>os.makedirs("new1/new1-1")>>>os.rename("new1/new1-1","new1/new1-2")#new1-1new1-2>>>os.listdir("new1")['new1-2']>>>os.rename("new1/new1-2","new2/new2-2")#因为new2目录不存在,所以报错Traceback(mostrecentcalllast):File"",line1,inFileNotFoundError:Thesystemcannotfindthe指定的路径。:'new1/new1-2'->'new2/new2-2'>>>os.renames("new1/new1-2","new2/new2-2")#renames可以自动创建不存在的目录>>>os.listdir("new2")['new2-2']如果目标路径文件已经存在,那么os.rename()和os.renames()都会报错:FileExistsError,当文件已经存在存在,该文件无法创建文档。3、文件操作(1)查询操作open/read/close:文件读取stat:文件信息,详见前面文件夹中的stat说明>>>f=os.open("test/test.txt",os.O_RDWR|os.O_CREAT)#打开文件>>>str_bytes=os.read(f,100)#读取100个字节>>>str=bytes.decode(str_bytes)#将字节转换为字符串>>>print(str)测试写入数据>>>os.close(f)#关闭文件。注意open/read/close需要一起操作,open操作需要指定模式。以上是以读写方式打开文件。如果该文件不存在,则创建文件.每种模式的详细信息如下:flags--该参数可以是以下选项,多个使用"|"os.O_RDONLY:只读打开os.O_WRONLY:只写打开os.O_RDWR:读打开写os.O_NONBLOCK:不阻塞打开os.O_APPEND:追加打开os.O_CREAT:创建和openanewfileos.O_TRUNC:打开一个文件并将其截断为零长度(必须有写权限)os.O_EXCL:如果指定文件存在,则返回错误os.O_SHLOCK:自动获取共享锁os.O_EXLOCK:自动获取独立锁os.O_DIRECT:消除或降低缓存影响os.O_FSYNC:同步写入os.O_NOFOLLOW:无跟踪软链接(2)创建操作使用open创建文件,指定模式,如果是则创建文件不存在。有点类似于linux操作中的touch。>>>f=os.open("test/ShowMeAI.txt",os.O_RDWR|os.O_CREAT)#如果文件不存在,则创建>>>os.close(f)(3)修改操作open/write/close:写文件的内容rename,renames:和上面描述的修改名字和移动的操作是一致的。>>>f=os.open("test/ShowMeAI.txt",os.O_RDWR|os.O_CREAT)#打开文件>>>os.write(f,b"ShowMeAItestwritedata")#写入内容15>>>os.close(f)#关闭文件(4)deleteremove:删除文件,注意不要删除目录(使用rmdir/removedirs)>>>os.remove("test/test-1")#删除目录报错Traceback(mostrecentcalllast):File"",line1,inFileNotFoundError:Thesystemcannotfindthefilespecified.:'test/test1'>>>os.remove("test/ShowMeAI.txt")#删除文件>>>os.listdir("test")['test-1']4.路径操作正在使用文件或在目录处理中,经常需要对文件和目录路径进行处理。因此在os中有一个子模块path,专门处理路径操作。主要操作如下:abspath:返回绝对路径>>>os.path.abspath("test")'/Users/ShowMeAI/test'exists:判断文件或目录是否存在>>>os.path。存在(“测试”)真>>>os.path.exists(“test/test.txt”)假>>>os.path.exists(“test/test-1/test-1.txt”)Trueisfile/isdir:判断是否为文件/目录>>>os.path.isdir("test")True>>>os.path.isfile("test/test-1/test-1.txt")Truebasename/dirname:获取路径尾部和路径头。实际上,路径中的最后一个/作为分隔符,将其分为两部分:头和尾。tail是basename返回的内容,head是dirname返回的内容。常用于获取文件名、目录名等>>>os.path.basename("test/test-1/test-1.txt")#文件名'test-1.txt'>>>os.path.basename("test/test-1/")#空内容''>>>os.path.basename("test/test-1")#目录名'test-1'>>>os.path.dirname("test/test-1/test-1.txt")#文件所在的目录路径'test/test-1'>>>os.path.dirname("test/test-1/")#目录路径'test/test-1'>>>os.path.dirname("test/test-1")#父目录路径'test'join:复合路径,即使用系统连接两个参数路径分隔符组成一个完整的路径。>>>os.path.join("test","test-1")#加入两个目录'test/test-1'>>>os.path.join("test/test-1","test-1.txt")#Connectdirectoryandfilename'test/test-1/test-1.txt'split:拆分文件名和文件夹,即用最后一个斜线“/”分隔路径作为头尾,作为(head,tail)元组返回。>>>os.path.split("test/test-1")#拆分目录('test','test-1')>>>os.path.split("test/test-1/")#以/('test/test-1','')结尾的目录拆分>>>os.path.split("test/test-1/test-1.txt")#splitfile('test/test-1','test-1.txt')splitext:拆分路径名和文件扩展名,拆分路径最后一个扩展名分隔符“.”,切割成头和尾,以(head,tail)元组的形式返回.请注意,与split的区别在于分隔符的区别。>>>os.path.splitext("test/test-1")('test/test-1','')>>>os.path.splitext("test/test-1/")('test/test-1/','')>>>os.path.splitext("test/test-1/test-1.txt")#区分文件名和扩展名('test/test-1/test-1','.txt')>>>os.path.splitext("test/test-1/test-1.txt.mp4")#使用最后一个“.”作为分割点('test/test-1/test-1.txt','.mp4')5.典型应用(1)批量修改文件名defbatch_rename(dir_path):itemlist=os.listdir(dir_path)#获取itemlist中item的目录文件列表:#连接成完整路径item_path=os.path.join(dir_path,item)print(item_path)#修改文件名ifos.path.isfile(item_path):slitext=os.path.splitext(item_path)os.rename(item_path,splitext[0]+"-ShowMeAI"+splitext[1])(2)遍历目录及子目录下所有指定扩展名的文件defwalk_ext_file(dir_path,ext_list):#@dir_path参数:要遍历的目录#@ext_list参数:扩展列表,例如['.mp4','.mkv','.flv']#遍历root,dirs,os.walk(dir_path):#获取fileinfiles的文件名和路径:file_path=os.path.join(root,file)file_item=os.path.splitext(file_path)#输出指定扩展名的文件路径iffile_item[1]inext_list:print(file_path)(3)根据修改时间对指定目录下的文件进行排序defsort_file_accord_to_time(dir_path):#排序前的itemlist=os.listdir(dir_path)print(itemlist)#正向排序itemlist.sort(key=lambdafilename:os.path.getmtime(os.path.join(dir_path,filename)))print(itemlist)#反向排序itemlist.sort(key=lambdafilename:os.path.getmtime(os.path.join(dir_path,filename)),reverse=True)print(itemlist)#获取最新修改的文??件print(itemlist[0])6.视频教程也可以点这里查看【中英文字幕】在B站https://www.bilibili.com/video...资料及代码下载本系列教程的代码可以在ShowMeAI对应的github上下载。可以在本地python环境中运行。会上网的宝宝也可以用googlecolab运行直接交互,一键学习!本系列教程涉及的Python备忘单可在以下地址下载:Python备忘单扩展参考资料Python教程-Python3文档Python教程-廖雪峰官网ShowMeAI相关文章推荐python基本数据类型Python运算符Python吧项控制和if语句python循环语句pythonwhile循环pythonfor循环pythonbreak语句pythoncontinue语句pythonpass语句python字符串和操作pythonlistpythontuplepython字典pythonsetpython函数python迭代器和生成器python数据结构python模块Python文件读取和编写python文件和目录操作python错误和异常处理python面向对象编程python命名空间和作用域python时间和日期ShowMeAI系列教程图文推荐Python编程:从新手到高手系列教程图文数据分析:从新手到高手AI数学基础说明系列教程:从入门到精通系列教程说明大数据技术:从入门到精通系列教程