如何将图片元数据info_dict数据存入DataFrame的独立列?
解决方法
原脚本的问题是把所有元数据拼成单个字符串塞进单列DataFrame,要实现每个元数据项对应独立列,直接利用info_dict的结构来构建DataFrame就行,不用手动拼接字符串。
修改后的完整代码
import os import pathlib import pandas as pd from PIL import Image rootdir = "你的图片目录路径" # 替换成实际的图片文件夹路径 metadata_list = [] # 用来收集所有图片的元数据字典 for file in os.listdir(rootdir): try: image_path = os.path.join(rootdir, file) image = Image.open(image_path) # 提取元数据,保持字典结构不变 info_dict = { "FileName": os.path.basename(image.filename), "FileSize": os.path.getsize(image.filename), "FileSuffix": pathlib.Path(image.filename).suffix, # 原键名FilePath容易误解,建议改成FileSuffix,要保留原列名也可以不改 "DPI": image.info['dpi'][0], "Height": image.height, "Width": image.width, "Format": image.format, "Mode": image.mode, "Frames": getattr(image, "n_frames", 1) } metadata_list.append(info_dict) # 把当前图片的元数据字典加入列表 except Exception as e: print(f"处理文件 {file} 时出错: {e}") continue # 用收集好的字典列表创建DataFrame,自动以字典的键作为列名 DPIDf = pd.DataFrame(metadata_list) print(DPIDf)
关键改动说明
- 先建一个空列表
metadata_list,把每张图片的元数据字典都存进去,避免每次循环都新建DataFrame,效率更高 - 直接把
info_dict添加到列表里,pandas会自动把字典的键作为列名,对应的值作为每行的数据,完美匹配你要的“每个数据项存到对应独立列”的需求 - 修正了原脚本里
FilePath的命名问题(原代码实际取的是文件后缀,不是完整路径,改名为FileSuffix更准确,要是必须保留原列名也可以不改) - 加了
except块捕获异常,单个文件处理失败不会导致整个脚本停掉
内容的提问来源于stack exchange,提问作者Eddiex045
相关产品推荐
相关产品推荐

