You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对已排序文件列表按大小分组(单组总大小不超100KB)

问题描述

现有文件列表:['Doc3.pdf', 'Doc4.pdf', 'Doc2.pdf', 'Doc5.pdf', 'Doc1.pdf', 'Doc6.pdf'],对应文件大小依次为30KB、60KB、120KB、20KB、10KB、35KB。需不改变原列表顺序,将其转换为嵌套列表,每组文件总大小不超过100KB,预期输出为[['Doc3.pdf', 'Doc4.pdf'], ['Doc2.pdf'], ['Doc5.pdf', 'Doc1.pdf', 'Doc6.pdf']]。获取文件大小需使用os.path.getsize("nameOfFile")方法。

解决方案

通过遍历文件列表,累加当前组的文件字节大小(注意os.path.getsize返回字节数,需与100KB的字节值对比),当加入下一个文件会超过限制时,新建分组。代码实现如下:

import os

def group_files_by_size(file_list, max_total_kb=100):
    max_total_bytes = max_total_kb * 1024  # 转换为字节单位
    groups = []
    current_group = []
    current_total = 0

    for filename in file_list:
        file_size = os.path.getsize(filename)
        # 判断加入当前文件是否超出大小限制
        if current_total + file_size > max_total_bytes:
            # 保存当前组,初始化新组
            groups.append(current_group)
            current_group = [filename]
            current_total = file_size
        else:
            # 加入当前组并更新总大小
            current_group.append(filename)
            current_total += file_size
    # 处理最后一组
    if current_group:
        groups.append(current_group)
    return groups

# 测试调用
target_files = ['Doc3.pdf', 'Doc4.pdf', 'Doc2.pdf', 'Doc5.pdf', 'Doc1.pdf', 'Doc6.pdf']
print(group_files_by_size(target_files))

代码说明

  • 先将100KB转换为字节(1KB=1024字节),确保与os.path.getsize的返回值单位统一;
  • 遍历过程中维护当前分组和分组总大小,每次判断新增文件是否会超限,超限则新建分组;
  • 遍历结束后需将最后一个非空分组加入结果列表,避免遗漏。

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:14:59