吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 625|回复: 11
收起左侧

[资源求助] 求一种文件分类的脚本或者软件

[复制链接]
open88 发表于 2024-3-13 13:23
140吾爱币
本帖最后由 open88 于 2024-3-13 16:13 编辑

希望能做到按文件大小分类,比如在一堆文件中自动选择十个文件然后他们加起来总的大小是20G,可以自动分类到不同文件夹

最佳答案

查看完整内容

文件夹里面不能包含文件夹 如果处理'D:\xxxxx',那么生成的文件夹在D:\而且文件夹名称Subfolder_1、2、3.......... [mw_shl_code=python,true]import os import shutil # 获取文件夹总大小、文件数量、单个文件大小 def get_folder_info(folder): total_size = 0 file_count = 0 files_with_size = {} for dirpath, dirnames, filenames in os.walk(folder): for f in filenames: ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

chenmi2017 发表于 2024-3-13 13:23
文件夹里面不能包含文件夹
如果处理'D:\xxxxx',那么生成的文件夹在D:\而且文件夹名称Subfolder_1、2、3..........


[Python] 纯文本查看 复制代码
import os
import shutil

# 获取文件夹总大小、文件数量、单个文件大小
def get_folder_info(folder):
    total_size = 0
    file_count = 0
    files_with_size = {}
    for dirpath, dirnames, filenames in os.walk(folder):
        for f in filenames:
            fp = os.path.join(dirpath, f)
            if os.path.isfile(fp):
                file_size = os.path.getsize(fp)
                files_with_size[f] = file_size
                total_size += file_size
                file_count += 1

    return total_size, file_count, files_with_size


# 分配文件
def new_files(path,total_capacity):
    count=0
    # path父级目录
    parent_folder = os.path.dirname(path)
    while True:
        print(f'开始分组,当前第:{count+1}组')
        data=0
        l=0
        lod_files=get_folder_info(path)        
        if int(lod_files[1])>0:
            subfolder_name = os.path.join(parent_folder, f"Subfolder_{count}")
            os.makedirs(subfolder_name, exist_ok=True)            
            sorted_files = sorted(lod_files[2].items(), key=lambda x: x[1], reverse=True)
            for name,file_size in sorted_files:
                l+=1
                file_path = os.path.join(path, name)
                data+=file_size
                if data//( 1024 * 1024 * 1024)>total_capacity:
                    break
                shutil.move(file_path,subfolder_name)
                if l >10:
                    break
            count+=1     
            
        else:
            break



if __name__ == "__main__":
    # 你要处理的路径
    path=r'D:\xxxxx'
    # 文件夹最大大小,单位GB
    total_capacity=20
    # 获取处理文件夹的信息
    lod_files=get_folder_info(path)
    print(f'当前操作文件夹路径:{path}')    
    print(f"当前文件夹总大小:{lod_files[0]//(1024 * 1024)} MB")
    print(f'当前操作文件夹文件数量:{lod_files[1]}')
    # print(f'当前操作文件夹文件详细信息:{lod_files[2]}')
    # 进行分离
    new_files(path)
    
    





免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
open88 + 1 + 1 我很赞同!

查看全部评分

注册个id 发表于 2024-3-13 14:08
根据你的描述,可以试试下面这款工具

文件管理神器DropIt_v8.5.1_Portable绿色单文件中文便携版
https://www.52pojie.cn/thread-1018846-1-1.html
https://www.52pojie.cn/thread-1158002-1-1.html
(出处: 吾爱破解论坛)
 楼主| open88 发表于 2024-3-13 14:36
注册个id 发表于 2024-3-13 14:08
根据你的描述,可以试试下面这款工具

文件管理神器DropIt_v8.5.1_Portable绿色单文件中文便携版

这个规则里好像只有按文件大小大于或者小于多少来分类,怎么做到自动挑选好十个文件,然后十个文件的总大小是20G呢,不要求每个文件具体的大小,只要累计大小是20g
 楼主| open88 发表于 2024-3-13 14:42
或者说将文件夹里的文件按大小平均分配到子文件夹里
joffrey 发表于 2024-3-13 14:44
需求再写详细点,我给你写个脚本
 楼主| open88 发表于 2024-3-13 14:53
joffrey 发表于 2024-3-13 14:44
需求再写详细点,我给你写个脚本

将文件夹内的文件按大小平均分配到子文件夹,每个子文件夹内的文件数量不超过十个,文件大小在19到20GB附近,不超过20GB,这样可以吗大佬
 楼主| open88 发表于 2024-3-14 22:27
chenmi2017 发表于 2024-3-14 14:21
文件夹里面不能包含文件夹
如果处理'D:\xxxxx',那么生成的文件夹在D:\而且文件夹名称Subfolder_1、2、3.. ...

大佬可以封装成脚本吗,本人纯小白
dazuyishi1314 发表于 2024-3-14 23:03
open88 发表于 2024-3-14 22:27
大佬可以封装成脚本吗,本人纯小白

你可以百度下bat转exe的软件
 楼主| open88 发表于 2024-3-14 23:11
chenmi2017 发表于 2024-3-14 14:21
文件夹里面不能包含文件夹
如果处理'D:\xxxxx',那么生成的文件夹在D:\而且文件夹名称Subfolder_1、2、3.. ...

[Python] 纯文本查看 复制代码
C:\Users\Lynd\PycharmProjects\pythonProject\.venv\Scripts\python.exe C:\Users\Lynd\PycharmProjects\pythonProject\new1.py 
Traceback (most recent call last):
  File "C:\Users\Lynd\PycharmProjects\pythonProject\new1.py", line 63, in <module>
    new_files(path)
TypeError: new_files() missing 1 required positional argument: 'total_capacity'
当前操作文件夹路径:H:\big
当前文件夹总大小:707366 MB
当前操作文件夹文件数量:185

Process finished with exit code 1

用pycharm运行了一下显示这个是什么意思呢大佬
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-12 14:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表