You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python获取目录下以KB为单位的图片文件大小

图片信息提取脚本问题修复

问题描述

需求为批量提取指定目录下图片的名称、分辨率、以KB为单位的磁盘文件大小并写入CSV文件。原有代码可正常获取图片名称与分辨率,但size字段返回的是像素相关数值,不符合磁盘文件大小的获取需求。

问题根因

原有代码中使用的img.size是OpenCV读取图像后生成的numpy数组的元素总个数,计算逻辑为图像高度 * 图像宽度 * 通道数,属于图像像素维度的统计值,和文件在磁盘上的实际存储大小无关。

修复后完整代码

# 导入依赖库
from os import listdir
from os.path import isfile, join, getsize, exists
from pathlib import Path
import cv2
import argparse
import csv

# 初始化CSV文件路径
csv_path = Path("csv/details.csv")
# 若csv目录不存在则自动创建
csv_path.parent.mkdir(exist_ok=True)

# 判断CSV文件是否存在,不存在则写入表头
if not exists(csv_path):
    with open(csv_path, 'w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow(["S.No.", "Name", "Resolution", "Size"])

# 配置命令行参数获取图片目录路径
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="图片文件夹路径")
args = vars(ap.parse_args())
mypath = args["image"]

# 遍历目录下所有文件
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]
# 支持的图片格式后缀
img_suffix = ('.jpg', '.jpeg', '.png', '.bmp', '.tiff', '.webp')

for idx, filename in enumerate(onlyfiles):
    path = join(mypath, filename)
    # 过滤非图片文件,避免读取报错
    if not filename.lower().endswith(img_suffix):
        continue
    # 读取图片获取分辨率
    img = cv2.imread(path, cv2.IMREAD_UNCHANGED)
    if img is None:
        continue
    h, w = img.shape[:2]
    resolution = f"{h} X {w}"
    # 获取磁盘文件大小,转换为KB单位,保留2位小数
    file_size_kb = round(getsize(path) / 1024, 2)
    size = f"{file_size_kb} KB"
    
    # 结果写入CSV
    with open(csv_path, 'a', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow([idx+1, filename, resolution, size])

关键修改说明

  • 移除原代码中错误的img.size像素统计逻辑,使用标准库os.path.getsize()直接读取文件在磁盘上的实际字节数,按1KB=1024字节换算为KB单位,结果保留2位小数
  • 修复原代码CSV初始化逻辑bug:原代码在文件已存在时先用w+模式清空文件,再用追加模式写入表头,易造成数据丢失、表头重复问题,调整为仅当CSV文件不存在时才写入表头
  • 移除重复导入的numpy、重复读取图片的冗余代码,删除with语句块内多余的手动文件关闭操作(上下文管理器会自动完成文件资源释放)
  • 增加图片格式过滤、图片读取失败判断逻辑,避免目录下存在非图片文件、损坏图片时脚本运行中断
  • 增加csv目录自动创建逻辑,省去手动创建目录的步骤,同时指定文件编码为utf-8避免中文乱码

内容的提问来源于stack exchange,提问作者Keerthi Kamarthi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:06:25