查看原文
其他

Python实用脚本:删除小文件

码中人 码农真经 2023-12-25

在 windows 下,删除特定大小的文件是非常简单的,一个简单的 powershell 脚本命令就可以搞定。

比如删除小于6KB的 png 格式的文件:

ls -Filter *.png | where {$_.Length -lt 6KB} | Remove-Item -Force-Recurse 

我最近用 Stable Diffusion AI 画图工具画了一些图。有一些图是纯黑的失败作品。因为纯色图片相对是比较小的,就可以用上面的脚本删除掉。

AI失败图片

但是,因为我在AI画图的时候,会把每一步的图的标签也存下来,所以每一个 png 文件,都会有一个对应的 txt 文件,也是要删除的。所以,我就写了一个 python 脚本,删除指定大小的文件,和相关的 txt 文件。

import os
import argparse

def get_all_files(path,ext,size):
    all_files = []
    for root, _dirs, files in os.walk(path):
        for filename in files:
            if ext is None or filename.endswith(ext):
                file_path = os.path.join(root, filename)
                if os.path.getsize(file_path) < size:
                    all_files.append(file_path)
    return all_files

def remove(all_files):
    for filename in all_files:
        info_file = os.path.splitext(filename)[0] + '.txt'
        os.remove(filename)
        if os.path.exists(info_file):
            os.remove(info_file)

def show_filesize(file_path):
    size = os.path.getsize(file_path)
    if size < 1024:
        return str(size) + 'B'
    elif size < 1024 * 1024:
        return str(round(size / 10242)) + 'KB'
    elif size < 1024 * 1024 * 1024:
        return str(round(size / 1024 / 10242)) + 'MB'
    else:
        return str(round(size / 1024 / 1024 / 10242)) + 'GB'

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='一个按大小删除文件的脚本')
    parser.add_argument('-f','--folder',type=str,default=os.getcwd(), help='要操作的文件夹')
    parser.add_argument('-s','--size'type=inthelp='文件大小,单位为KB',default=0)
    parser.add_argument('-e','--ext'type=strhelp='文件类型')
    parser.add_argument('-ch','--check'type=boolhelp='是否检查文件大小',default=False)
    args = parser.parse_args()

    size = args.size * 1024
    all_files = get_all_files(args.folder,args.ext,size)
    if args.check:
        for filename in all_files:
            print(filename,show_filesize(filename))
    else:
        print('remove...')
        remove(all_files)
        print('done')

使用如下:

python .\remove.py -f D:\txt2img-images -s 10 -e txt -ch true

往期推荐

欢迎关注我的公众号“码农真经”,原创技术文章第一时间推送。


继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存