查找最大文件和删除文件夹

2 投票
2 回答
4839 浏览
提问于 2025-04-16 07:39

我正在写一个清理脚本,用来处理我下载的电视剧。我想让这个脚本找到每个文件夹里最大的文件,然后把它移动或重命名,最后删除那个文件夹。不过我遇到的问题是,有时候如果文件夹里还有其他嵌套的文件夹,脚本就会崩溃,跳过这些文件夹。我不太确定怎么把这个功能改成一个递归函数,这样就能处理嵌套的情况。此外,我希望能直接找到最大的文件,而不是固定使用30MB这个大小。

还有,有时候我下载的文件日期不正确,所以如果能在脚本运行时把新文件的日期和时间设置为当前的就好了。

import os
import shutil


dir = "C:\Users\Bobe\Downloads\TV\\"

for folder in os.listdir(dir):
    if os.path.isdir(os.path.join(dir,folder)):
        for file in os.listdir(dir + folder):
            filelocation = dir+folder+"\\"+file
            if os.path.getsize(filelocation) > 30000000: # This is in bytes (30 MB)
                extension = os.path.splitext(file)[1]
                shutil.move(filelocation, dir + folder + extension)
            else:               
                os.remove(filelocation)

        shutil.rmtree(dir + folder)

2 个回答

0

这个问题大约在12年前就解决了,不过这里有一行代码,可能对某些人有帮助。(不过它不适用于子目录)

inorder=sorted([[os.path.getsize(os.path.join(folder, x)),os.path.join(folder, x)] for x in os.listdir(folder)])

输出结果:

biggest = inorder[-1]
smallest = inorder[0]
print(biggest,smallest)
[15794079, 'C:\\Users\\Gamer\\Documents\\Downloads\\volatility_2.6_win64_standalone\\volatility_2.6_win64_standalone\\volatility_2.6_win64_standalone.exe'] [698, 'C:\\Users\\Gamer\\Documents\\Downloads\\volatility_2.6_win64_standalone\\volatility_2.6_win64_standalone\\LEGAL.txt']
4

我现在正在学习Python :) 谢谢这个练习 :D

这个应该可以运行:

import os
import sys

biggest = ("", -1)
directory = sys.argv[1]

print "Searching", directory

def search(dir):
    global biggest
    for item in os.listdir(dir):
        item = dir + "/" + item
        if os.path.isdir(item):
            search(item)
        else:
            itemsize = os.path.getsize(item)
            if itemsize > biggest[1]:
                    biggest = (item, itemsize)

search(directory)
if biggest[1] != -1:
    print "Found: ", biggest
    # Do something with biggest

祝你好运!

撰写回答