如何删除文件夹及其子文件夹中的所有空文件?

时间:2015-04-04 21:40:52

标签: python

我正在尝试删除文件夹中的所有空文件,文件夹中有文件夹,因此它也需要检查这些文件夹:

e.g 删除C:\ folder1 \ folder1和C:\ folder1 \ folder2等

中的所有空文件

5 个答案:

答案 0 :(得分:3)

import sys
import os

def main():
    getemptyfiles(sys.argv[1])


def getemptyfiles(rootdir):
    for root, dirs, files in os.walk(rootdir):
        for d in ['RECYCLER', 'RECYCLED']:
            if d in dirs:
                dirs.remove(d)

        for f in files:
            fullname = os.path.join(root, f)
            try:
                if os.path.getsize(fullname) == 0:
                    print fullname
                    os.remove(fullname)
            except WindowsError:
                continue

这将有点调整:
os.remove()语句可能会失败,因此您可能希望用try...except包装它。 WindowsError是特定于平台的。过滤遍历的目录并非绝对必要,但很有帮助。

答案 1 :(得分:0)

for循环使用dir以递归方式查找当前目录和所有子文件夹中的所有文件,但不查找目录。然后第二行检查每个文件的长度是否小于1个字节,然后再删除它。

cd /d C:\folder1

for /F "usebackq" %%A in (`dir/b/s/a-d`) do (
    if %%~zA LSS 1 del %%A
)

答案 2 :(得分:0)

我希望这可以帮到你

#encoding = utf-8
import os

docName = []
def listDoc(path):
    docList = os.listdir(path)
    for doc in docList:
        docPath = os.path.join(path,doc)
        if os.path.isfile(docPath):
            if os.path.getsize(docPath)==o:
                os.remove(docPath)
        if os.path.isdir(docPath):
            listDoc(docPath)

listDoc(r'C:\folder1')

答案 3 :(得分:0)

import os    
while(True):
    path = input("Enter the path")  
    if(os.path.isdir(path)):  
        break  
    else:  
        print("Entered path is wrong!") 
for root,dirs,files in os.walk(path):  
    for name in files:  
        filename = os.path.join(root,name)   
        if os.stat(filename).st_size == 0:  
            print(" Removing ",filename)  
            os.remove(filename)  

答案 4 :(得分:0)

我首先要删除空文件,然后按照此答案(https://stackoverflow.com/a/6215421/2402577),我已经删除了空文件夹。

此外,我在topdown=False中添加了os.walk()以便从叶漫游到roo,因为os.walk()的默认行为是从根漫游到叶子。

因此,同样包含空文件夹或文件的空文件夹也将被删除。

import os    

def remove_empty_files_and_folders(dir_path) -> None:
    for root, dirnames, files in os.walk(dir_path, topdown=False):
        for f in files:
            full_name = os.path.join(root, f)
            if os.path.getsize(full_name) == 0:
                os.remove(full_name)

        for dirname in dirnames:
            full_path = os.path.realpath(os.path.join(root, dirname))
            if not os.listdir(full_path):
                os.rmdir(full_path)