📜  python os.walk recursive - Python (1)

📅  最后修改于: 2023-12-03 15:34:03.096000             🧑  作者: Mango

Python os.walk递归

os.walk是Python中递归遍历文件夹的一个很有用的函数。本文将介绍如何使用os.walk递归遍历文件夹。

os.walk函数

os.walk函数接收一个路径参数,返回一个遍历器对象。遍历器对象生成包含三个元素的元组:(文件夹路径, 文件夹中包含的子文件夹列表, 文件夹中包含的文件列表),这三个元素跟当前遍历的路径有关。

以下是使用os.walk遍历目录的基本示例代码:

import os

for dirpath, dirnames, filenames in os.walk('/path/to/dir'):
    print('Current Path:', dirpath)
    print('Directories:', dirnames)
    print('Files:', filenames)

以上代码遍历了/path/to/dir目录及其所有子目录,并打印出每个子目录的路径,以及该目录中包含的子目录和文件列表。可以根据需要对获取到的子目录和文件列表做进一步的处理。

示例

以下示例代码使用os.walk遍历指定路径下的所有Python文件,并打印文件名和文件大小信息:

import os

def convert_bytes(num):
    """
    this function will convert bytes to MB.... GB... etc
    """
    for x in ['bytes', 'KB', 'MB', 'GB', 'TB']:
        if num < 1024.0:
            return "%3.1f %s" % (num, x)
        num /= 1024.0

def get_file_info(file_path):
    """
    this function will return file_size and file_name
    """
    file_size = os.path.getsize(file_path)
    file_name = os.path.basename(file_path)
    return (file_name, file_size)

def main():
    start_path = '/path/to/dir'
    for dirpath, dirnames, filenames in os.walk(start_path):
        for file in filenames:
            if file.endswith('.py'):
                file_path = os.path.join(dirpath, file)
                file_name, file_size = get_file_info(file_path)
                print("File name:", file_name)
                print("File size:", convert_bytes(file_size))

if __name__ == '__main__':
    main()

以上代码遍历了/path/to/dir目录及其所有子目录,并打印出所有Python文件的文件名及文件大小信息。

总结

os.walk函数是Python中一个非常有用的函数,可以方便地递归遍历文件夹,获取文件夹内包含的子文件夹和文件信息。在处理大量文件或者需要批量处理文件时,使用os.walk可以大大提高开发效率。