开发者

Find Largest File and Deleting Folders

I'm working on a cleanup script for tv shows that I download. I want it to get the largest file in each folder, move/rename it and then delete that folder. The issue I'm having is that sometimes when there is another nested folder, it crashes and skips it. I'm not sure how to convert this into a recursive function that does the same functionality. It would also be nice to just look for the largest file instead of use the hard coded 开发者_开发技巧30MB.

Also, sometimes a file I download has an incorrect date so it would be great if it could make each new file the current date and time when the script ran.

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)


I'm currently learning python :) Thanks for the exercise :D

This should work:

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

Good luck!


Well, the problem was resolved around 12 years ago, but here is a one-liner, maybe it helps somebody. (Not working for subdirectories)

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

Output:

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']
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜