如何对已排序文件列表按大小分组(单组总大小不超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
相关产品推荐
相关产品推荐

