在Python编程过程中,我们常常有这样的需求,需要获取某一个文件目录下的所有文件,或获取文件目录下的所有指定后缀名的文件,亦或要求获取该文件所在的文件夹,还有可能需要替换文件名,删除文件夹。针对这些问题,本文系统总结了这些方法,以供大家参考。
本实例的文件夹放置在桌面,路径为:C:\Users\Smile\Desktop\周汇报,该文件夹下有个子文件夹,子文件夹有一个pdf文件。
这里推荐使用os模块下的listdir方法,该方法可以获取该文件夹下的所有文件名称(包含子文件夹名称),之后配合os.path.join方法来获取该文件夹下的所有文件路径。
import os
dir_path = r'C:\Users\Smile\Desktop\周汇报'
file_ls = os.listdir(dir_path) #获取所有文件名称
file_ls
运行结果如下:
我们可以发现,结果不仅包括了文件名,还包括了子文件夹名。
获取完整路径,在上面基础上使用1行代码即可:
file_ls = [os.path.join(dir_path, file) for file in file_ls]
file_ls
如上图可以发现获取了指定文件夹下的所有文件路径,还包括了子文件夹路径。但是如果我们想要连带获取子文件夹下的文件名该如何操作?
解决方案就是通过os.walk方法进行。它返回3个参数——根目录、根目录下的所有文件、根目录下的子文件夹。它的神奇之处在于获取根目录子文件夹后会继续循环,依次取出根目录下子文件夹下的文件。
path = r'C:\Users\Smile\Desktop\周汇报'
for root, dirs, files in os.walk(path):
print(root)
运行的结果为:
C:\Users\Smile\Desktop\周汇报
C:\Users\Smile\Desktop\周汇报\数据
可以发现在实验中循环了两次,这里指定输出当前循环的根目录,第一次循环遍历了根目录下的文件,由于该根目录下存在子文件夹,所以又循环了一次以获取子文件夹下的文件,所以第二次循环输出的根目录为子文件夹的位置。
对此,我们可以确定,如果在循环外面指定一个空列表。在每一次循环时将文件名与根目录进行拼接并添加到空列表中,就可以得到根目录下所有的文件路径。
path = r'C:\Users\Smile\Desktop\周汇报'
file_ls = []
for root, dirs, files in os.walk(path):
root_file_ls = [os.path.join(root, file) for file in files]
file_ls.append(root_file_ls)
file_ls
结果如下:
结果中可以看到,位于子文件夹下的文件也被添加到文件路径列表了。
这里可以使用os.path.splitext方法来分割路径,它将路径分为两个部分,一个是后缀名,另一个是除后缀名之外的部分。
file = r'C:\\Users\\Smile\\Desktop\\周汇报\\第六周总结_20221024_20221030.pptx'``houzhui = os.path.splitext(file)[1]``houzhui`` ``--结果--``'.pptx'
路径的本质是字符串,可以使用endswith方法来判断路径是否以某个字符结尾。现在将r’C:\Users\Smile\Desktop\周汇报’直接路径下(不含子文件夹)的所有docx文件输出。
path = r'C:\Users\Smile\Desktop\周汇报'
file_ls = []
for root, dirs, files in os.walk(path):
root_file_ls = [os.path.join(root, file) for file in files]
file_ls.append(root_file_ls)
#因为上面循环了两次,第二次是子文件夹的文件,所以取出第1个元素
#使用endswith判断是否以docx结尾
file_ls = [file for file in file_ls[0] if file.endswith('.docx')]
file_ls
结果如下:
可以看出已经将所有的docx文件输出。
使用os.rename(old_name, new_name)来进行。
例子我就不举了,太累了~~~
不过要提醒一点,old_name和new_name都是路径。
删除文件使用os.remove(路径名)
移动文件需要使用shuilt库,语法如下:
import shutil
shutil.move(old_name, new_name)
使用os.path.dirname(path)即可获取
path = r'C:\\Users\\Smile\\Desktop\\周汇报\\第001周总结_20220919_20220925.docx'
os.path.dirname(path)
--结果--
'C:\\\\Users\\\\Smile\\\\Desktop\\\\周汇报'
1.如果使用os.remove(path),此时的文件夹必须是空文件夹,否则会报错。
2.如果是非空文件夹,使用shutil.rmtree(path)即可成功删除。
对于文件路径的操作主要有:文件路径获取、后缀名获取、获取指定后缀名文件、删除/移动文件、替换文件名、获取文件所在的文件夹、移除文件夹。
通过系统性的总结可以帮助我们编写代码节约时间,如果觉得对你有帮助,可以点赞、分享、收藏。
如果你对Python感兴趣的话,可以试试我整理的这份Python全套学习资料,微信扫码免费领取
包括:Python永久使用安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等学习教程。带你从零基础系统性的学好Python!
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
工欲善其事,必先利其器。学习Python常用的开发软件都在这里了!
还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。这份资料也包含在内的哈~
我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
上述完整版Python全套学习资料已经上传CSDN官方,需要的小伙伴可自行微信扫描下方CSDN官方认证二维码免费领取!!