zoukankan      html  css  js  c++  java
  • 教你用Python遍历指定目录下的所有文件以及文件的过滤

           写程序我们经常会遇到需要遍历某一个目录下的所有文件这个操作,之前也写过很多用java实现的。但是java里面只能获取当前目录下列表,然后需要循环判断哪些是目录,哪些是文件,然后再进行文件夹的循环遍历,可以说相当麻烦。然而python有现成的库,只需要2个循环就可以搞定。

           代码如下,我们使用os.walk()方法来获取所有文件。

      os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]) 输出在文件夹中的文件名通过在树中游走,向上或者向下。

      关于os的更多操作可以通过这个链接查看:http://www.runoob.com/python3/python3-os-file-methods.html

    import os
    
    def all_path(dirname):
    
        result = []#所有的文件
    
        for maindir, subdir, file_name_list in os.walk(dirname):
    
            print("1:",maindir) #当前主目录
            print("2:",subdir) #当前主目录下的所有目录
            print("3:",file_name_list)  #当前主目录下的所有文件
    
            for filename in file_name_list:
                apath = os.path.join(maindir, filename)#合并成一个完整路径
                result.append(apath)
    
        return result
    
    print(all_path("E:myTest"))

           创建一个测试目录,目录结构如下

      

      程序运行结果如下:

      ['E:\myTest\kuang3.png', 'E:\myTest\txt1.txt', 'E:\myTest\txt2.txt', 'E:\myTest\YYGB1.png', 'E:\myTest\YYGB2.png', 'E:\myTest\test1\txt11.txt', 'E:\myTest\test2\txt21.txt', 'E:\myTest\test2\txt22.txt']

           然后既然路径都出来了,大家就可以进行一些批量操作了,比如使用之前的加密程序加密一些自己的小东东。当然现在我们是获取了所有的文件,如果我们只想要某一个类型的文件,那么也很简单,写个过滤就好了。所以修改后的代码如下:

    import os
    
    filter=[".txt"] #设置过滤后的文件类型 当然可以设置多个类型
    
    def all_path(dirname):
    
        result = []#所有的文件
    
        for maindir, subdir, file_name_list in os.walk(dirname):
    
            # print("1:",maindir) #当前主目录
            # print("2:",subdir) #当前主目录下的所有目录
            # print("3:",file_name_list)  #当前主目录下的所有文件
    
            for filename in file_name_list:
                apath = os.path.join(maindir, filename)#合并成一个完整路径
                ext = os.path.splitext(apath)[1]  # 获取文件后缀 [0]获取的是除了文件名以外的内容
    
                if ext in filter:
                    result.append(apath)
    
        return result
    
    print(all_path("E:myTest"))
    
    #运行结果
    #['E:\myTest\txt1.txt', 'E:\myTest\txt2.txt', 'E:\myTest\test1\txt11.txt', 'E:\myTest\test2\txt21.txt', 'E:\myTest\test2\txt22.txt']

      我们已经找到了所有的txt文件,是不是很方便那?大家也来试试吧。

      

  • 相关阅读:
    2019 Java 第四周总结
    2019第三周总结
    Java 第二周总结
    2019春第十二周作业
    Day3
    Day3
    Day3
    Day3
    Day2
    Day2
  • 原文地址:https://www.cnblogs.com/smallfoxdog/p/8622119.html
Copyright © 2011-2022 走看看