java,python遍历文件夹与子文件夹

Posted bitcarmanlee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java,python遍历文件夹与子文件夹相关的知识,希望对你有一定的参考价值。

1.遍历文件夹树形结构

我们经常需要针对目录的树形结构进行遍历,即遍历目录中的子文件夹与文件。如果子文件夹里面还包含有文件夹,则继续递归进行遍历。

2.java实现方案

先直接上代码

import java.io.*;

/**
 * author: wanglei
 * create: 2022-08-24
 */
public class ReadFiles 

    private static void readDirectory(String path) 
        File file = new File(path);
        File[] files = file.listFiles();
        for(File fs: files) 
            String curpath = fs.getAbsolutePath();
            String filename = fs.getName();
            if (fs.isDirectory()) 
                System.out.println(curpath + " is directory");
                readDirectory(curpath);
             else 
                System.out.println(curpath + " is file");
                System.out.println("filename is: " + filename);
                readFile(curpath);
                System.out.println("**********\\n");
            
        
    

    public static void readFile(String filepath) 
        try 
            BufferedReader br = new BufferedReader(new FileReader(new File(filepath)));
            String line;
            while((line = br.readLine()) != null) 
                System.out.println(line);
            
         catch (FileNotFoundException e) 
            e.printStackTrace();
         catch (IOException e) 
            e.printStackTrace();
        
    

    public static void main(String[] args) 
        String path = "xxx";
        readDirectory(path);
    

上面代码的思路:
1.首先调用listFiles方法,返回Files数组,包含当前目录下的所有目录与文件。注意在java中,File对象可以表示文件,也可以表示目录。
2.调用File对象的isDirectory方法,判断其是否为目录。
3.如果为目录,则主方法递归。
4.如果为文件,进行相应操作(示例中为读取文件的内容)。

3.python实现方案

3.1 使用listdir的方式

老规矩,上代码

def get_filelist(path):
    filelist = os.listdir(path)
    for f in filelist:
        absolutepath = os.path.join(path, f)
        if os.path.isdir(absolutepath):
            print("dirname is: ", absolutepath)
            get_filelist(absolutepath)
        elif os.path.isfile(absolutepath):
            print("filename is: ", absolutepath)
            readfile(absolutepath)
            print("******************\\n")


def readfile(filename):
    f = open(filename)
    for line in f.readlines():
        print(line.strip())

上面的思路跟java版本比较像

1.listdir(path)返回指定的文件夹包含的文件或文件夹名字列表。
2.判断是否为目录。如果为目录,主方法进行递归。
3.如果为文件,进行相应操作。

3.2 os.walk的方式

python中提供了walk方法,os.walk 的返回值是一个生成器(generator)。使用的时候我们不停遍历,可以获取生成器中的内容。对生成器每次遍历,获得的对象均为一个三元tuple(root, dirs, files)。其中
root是当前遍历的这个文件夹自己的地址。
dirs是一个list,里面是该文件夹中所有目录的名字,但是不包含子目录。
files也是一个list,里面是该文件夹中所有的文件,但是不包含子目录中的文件。

def walk_list(path):
    for root, dirs, files in os.walk(path):
        for d in dirs:
            print("d is: ", os.path.join(root, d))
        for f in files:
            print("file is: ", os.path.join(root, f))
        print("***********\\n")

以上是关于java,python遍历文件夹与子文件夹的主要内容,如果未能解决你的问题,请参考以下文章

python遍历目录就是这么简单

JAVA遍历一个文件夹中的所有文件---(递归)

如何利用Python遍历文件夹

如何在 Python 中将 mv 命令与子进程一起使用

如何利用Python遍历文件夹

Python中如何遍历指定目录下的所有文件?