判断文件夹图片是否是损坏无法打开的图片无法打开就删除 ,文件夹一直要写入图片导致图片没有加载完成被判断为异常图片给删除了怎么解决

判断文件夹图片是否是损坏无法打开的图片无法打开就删除 ,文件夹一直要写入图片导致图片没有加载完成被判断为异常图片给删除了怎么解决

img

以下回答参考GPT,请查看是否可解决你的问题:
如果在判断图片是否损坏和删除的过程中,文件夹一直在写入新的图片导致无法加载完成,可以采取以下解决方法:

  1. 在遍历文件夹之前,暂停文件夹写入操作:在调用 ii() 函数之前,暂停文件夹中的写入操作。这样可以确保不会在判断和删除图片时出现文件正在被写入的情况。

  2. 使用异常处理机制:在对图片进行打开和验证时,如果出现异常,可以通过捕获异常来处理。可以使用 try-except 块来捕获异常,并尝试几次打开并验证图片。如果多次尝试仍然失败,可以将该图片标记为异常,并进行删除操作。

以下是修改后的代码示例:

import time
import os
from PIL import Image

def ii():
    time.sleep(1)
    folder_path = r'img'
    # 暂停文件夹写入操作
    time.sleep(2)
    for filename in os.listdir(folder_path):
        file_path = os.path.join(folder_path, filename)
        if os.path.isfile(file_path) and any(file_path.endswith(extension) for extension in ['.jpg', '.png', '.jpeg']):
            try:
                with Image.open(file_path) as img:
                    img.verify()
                print(f"{file_path} 图片正常")
            except Exception as e:
                print(f"{file_path} 图片异常,错误信息: {str(e)}")
                try:
                    os.remove(file_path)
                    time.sleep(1)
                except Exception as e:
                    print("删除文件出错")
                    time.sleep(1)

# 调用函数
ii()

在修改后的代码中,我添加了 time.sleep(2) 来暂停文件夹的写入操作。可以根据需要调整暂停的时间,确保文件夹中的写入操作完成。这样就可以避免文件加载未完成而被误判为异常图片并删除的问题。

请注意,在处理文件和目录时,一定要小心操作,确保你要操作的是正确的文件夹和文件。另外,最好在进行删除操作之前,先做好备份以防误删。

【以下回答由 GPT 生成】

可以通过使用Python的PIL库(Pillow)来解决这个问题。

首先,你需要确保你已经安装了Pillow库,你可以使用以下命令来安装它:

pip install Pillow

接下来,你可以使用PIL库的Image模块来打开图片并判断它们是否能够成功加载。

下面是一个示例代码,它遍历指定文件夹中的所有图片文件,并判断它们是否可以打开成功。如果图片无法打开,则将其删除。

from PIL import Image
import os

def delete_corrupted_images(folder_path):
    for filename in os.listdir(folder_path):
        file_path = os.path.join(folder_path, filename)
        try:
            image = Image.open(file_path)
            image.verify()
        except (IOError, SyntaxError) as e:
            print(f"Deleting corrupted image: {file_path}")
            os.remove(file_path)

# 调用函数并传入文件夹路径
folder_path = "path/to/folder"
delete_corrupted_images(folder_path)

在上面的代码中,我们使用Image.open()方法来打开每个图片文件,并使用image.verify()方法来检查图片的完整性。如果图片无法打开,将会抛出IOErrorSyntaxError异常,这时我们就可以将其删除。

注意,Image.open()方法仅仅是加载图片的头部信息并检查了文件的完整性,所以它相对比较轻量级。但它可能不适用于所有的图片格式,你需要根据你的实际情况来判断。

此外,为了避免正在写入或加载的图片被判断为损坏图片,你可以在处理图片前等待一段时间,确保图片加载完整。你可以使用time.sleep()来等待固定时间,或者使用os.path.getmtime()来获取文件的最后修改时间,然后跟当前时间做比较,只处理一定时间之前的文件。

希望以上解决方案能够帮助你解决问题,如果有任何其他问题,请随时向我提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^