Python脚本实现自动检测并重命名非正常图片文件
概述
在日常的文件管理和数据处理中,我们可能会遇到一些文件名虽然以特定扩展名结尾,但实际内容并不符合该格式的情况。例如,某些文件可能被错误地标记为 .jpg 文件,但实际上它们可能是其他类型的文件,如视频文件。这种情况下,如果我们依赖文件扩展名来处理文件,就可能导致程序出现错误或无法正确处理文件。
本文介绍的Python脚本旨在解决这一问题,特别是针对被误标为 .jpg 的文件进行检测,并将那些实际上不是图像文件的项重命名为更合适的扩展名(如 .mp4)。这有助于确保目录中的所有文件都能被正确识别和处理。
代码详解
环境准备
首先,我们需要导入必要的模块:
os模块用于与操作系统交互,执行诸如遍历目录、检查文件路径以及重命名文件等操作。PIL.Image是 Python Imaging Library (Pillow) 中的一部分,提供了打开和验证图像文件的功能。
import os from PIL import Image
定义目标目录
接下来,定义一个变量 output_dir 来存储要处理的图片文件所在的目录路径。在这个例子中,目录名为 tupian。
output_dir = 'tupian'
遍历文件
使用 os.listdir(output_dir) 函数获取指定目录下的所有文件名,并通过循环逐一处理每个文件。为了确保我们只处理 .jpg 文件,使用了字符串方法 endswith() 来检查文件名是否以 .jpg 结尾(忽略大小写)。
for filename in os.listdir(output_dir):
file_path = os.path.join(output_dir, filename)
if filename.lower().endswith('.jpg'):
# 处理 .jpg 文件
else:
print(f"文件 {filename} 不是 JPG 文件,跳过处理")图像文件验证
对于每个 .jpg 文件,尝试使用 Image.open() 方法打开它,并调用 img.verify() 方法来检查文件是否为有效的JPEG图像。如果文件不能被正确打开或者验证失败,则捕获异常并认为这不是一个正常的 JPG 文件。
try:
with Image.open(file_path) as img:
img.verify()
except (IOError, SyntaxError):
# 处理非正常图像文件
else:
print(f"文件 {filename} 是正常的 JPG 文件")重命名非正常文件
当发现一个文件不是正常的 JPG 文件时,我们希望将其重命名为更合适的名字。这里假设这些文件实际上是视频文件,并将它们的扩展名改为 .mp4。为此,我们使用 os.rename() 函数来更改文件名,并打印一条消息来通知用户发生了什么。
new_filename = filename.rsplit('.', 1)[0] + '.mp4'
new_file_path = os.path.join(output_dir, new_filename)
os.rename(file_path, new_file_path)
print(f"文件 {filename} 不是正常的 JPG 文件,已重命名为 {new_filename}")总代码如下
import os
from PIL import Image
# 定义目录路径
output_dir = 'tupian'
# 遍历目录中的所有文件
for filename in os.listdir(output_dir):
file_path = os.path.join(output_dir, filename)
# 检查文件是否为 .jpg 文件
if filename.lower().endswith('.jpg'):
try:
# 尝试打开文件
with Image.open(file_path) as img:
img.verify() # 验证文件是否为有效的图像文件
except (IOError, SyntaxError):
# 如果无法打开或验证文件,则认为该文件不是正常的 JPG 文件
new_filename = filename.rsplit('.', 1)[0] + '.mp4'
new_file_path = os.path.join(output_dir, new_filename)
# 重命名文件
os.rename(file_path, new_file_path)
print(f"文件 {filename} 不是正常的 JPG 文件,已重命名为 {new_filename}")
else:
print(f"文件 {filename} 是正常的 JPG 文件")
else:
print(f"文件 {filename} 不是 JPG 文件,跳过处理")



