Python小程序:【查找】指定路径下的【大文件】,并根据文件大小【降序打印】结果

2023-12-13 13:37:16

引言

随着数据量的不断增长,管理文件系统中的大文件变得越来越重要。有时,您可能需要查找并识别出占用大量磁盘空间的大型文件。为此,我们可以编写一个简单的Python脚本,来搜索指定路径下的所有文件,并根据文件大小进行排序。

任务拆解

我们的任务可以分为以下几个步骤:

  1. 检查指定路径是否存在
  2. 检查指定大小是否为正数
  3. 遍历指定路径下的所有文件。
  4. 获取每个文件的大小。
  5. 根据文件大小进行排序。
  6. 打印排序后的结果。

实现过程

步骤1:检查指定路径是否存在

我们可以使用Python的os模块来检验路径是否存在。os.path.exists函数可以用于验证指定路径是否存在。下面是一个示例代码:

# 检查路径是否有效
if not os.path.exists(path):
	print(f"路径 '{path}' 不存在.")

步骤2:检查指定大小是否为正数

示例代码:

    # 检查大小限制是否为正数
    if size_limit <= 0:
        print("大小限制必须为正数.")

步骤3:遍历指定路径下的所有文件

我们可以使用Python的os模块来遍历文件系统。os.walk()函数可以遍历指定路径下的所有文件和子目录。下面是一个示例代码:

import os

def find_all_files(path):
    # 存储所有文件的列表
    all_files = []
    
    # 遍历指定路径下的所有文件和子目录
    for root, dirs, files in os.walk(path):
        for file in files:
            # 获取文件的完整路径
            file_path = os.path.join(root, file)
            all_files.append(file_path)
    
    return all_files

步骤4:获取每个文件的大小

我们可以使用os.path.getsize()函数来获取文件的大小,该函数返回文件的大小(以字节为单位)。下面是一个示例代码:

def get_file_sizes(files):
    # 存储文件大小和路径的字典
    file_sizes = {}
    
    for file in files:
        try:
            # 获取文件大小,以字节为单位
            size = os.path.getsize(file)
            file_sizes[file] = size
        except OSError as e:
            print(f"Error getting size of {file}: {e}")
    
    return file_sizes

步骤5:根据文件大小进行排序

我们可以使用Python的内置函数sorted()对字典进行排序。下面是一个示例代码, 按照文件大小降序排序:

# large_files = {file_path1:file_size1, file_path2:file_size2 ...}

large_files = {k: v for k, v in sorted(large_files.items(), key=lambda x: x[1], reverse=True)}

步骤6:打印排序后的结果

最后,如果我们找到了大于指定大小的大文件,那么可以打印排序后的结果。下面是一个示例代码:

    if found_files:
        print("*" * 50)
        print("对以上结果根据文件大小降序排列:")
        for file, size in found_files.items():
            print(f'{file}: {size / (1024 * 1024):.2f} MB')
    else:
        print("没有找到大于50MB的文件.")

完整代码

import os


def find_large_files(path, size_limit):
    """
    查找指定路径下大于指定大小的文件,并返回文件路径和大小的字典。

    参数:
        path (str): 搜索的路径。
        size_limit (int): 文件大小限制,单位为字节。

    返回:
        dict: 包含文件路径和大小的字典,键为文件路径,值为文件大小。
    """
    large_files = {}

    # 检查路径是否有效
    if not os.path.exists(path):
        print(f"路径 '{path}' 不存在.")
        return large_files

    # 检查大小限制是否为正数
    if size_limit <= 0:
        print("大小限制必须为正数.")
        return large_files

    try:
        for root, dirs, files in os.walk(path):
            for file in files:
                file_path = os.path.join(root, file)
                # 获取文件大小
                try:
                    file_size = os.path.getsize(file_path)
                    # 判断文件大小是否大于指定大小,如果是则添加到字典中
                    if file_size > size_limit:
                        large_files[file_path] = file_size
                        print(f'{file_path}: {file_size / (1024 * 1024):.2f} MB')
                except PermissionError:
                    print(f"没有权限访问文件 '{file_path}'.")
                except Exception as e:
                    print(f"在获取文件大小时出错: {e}")
                    # 根据文件大小降序排列
        large_files = {k: v for k, v in sorted(large_files.items(), key=lambda x: x[1], reverse=True)}
    except Exception as e:
        print(f"在查找大文件时出错: {e}")

    return large_files


def main():
    # 指定路径
    root = r"/path/to/folder"
    # 查找大于50MB的文件,并按照获取的文件大小降序排列打印结果
    # 50 * 1024 * 1024 ==> 50 M
    found_files = find_large_files(root, 50 * 1024 * 1024)
    if found_files:
        print("*" * 50)
        print("对以上结果根据文件大小降序排列:")
        for file, size in found_files.items():
            print(f'{file}: {size / (1024 * 1024):.2f} MB')
    else:
        print("没有找到大于50MB的文件.")


if __name__ == '__main__':
    main()

结束语

  • 亲爱的读者,感谢您花时间阅读我们的博客。我们非常重视您的反馈和意见,因此在这里鼓励您对我们的博客进行评论。
  • 您的建议和看法对我们来说非常重要,这有助于我们更好地了解您的需求,并提供更高质量的内容和服务。
  • 无论您是喜欢我们的博客还是对其有任何疑问或建议,我们都非常期待您的留言。让我们一起互动,共同进步!谢谢您的支持和参与!
  • 我会坚持不懈地创作,并持续优化博文质量,为您提供更好的阅读体验。
  • 谢谢您的阅读!

文章来源:https://blog.csdn.net/qq_41813454/article/details/134968897
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。