TensorFlow花卉分类数据集图片Resize时遇权限错误求助
解决花卉识别图片尺寸调整的权限错误问题
可能的问题根源
- OneDrive同步锁:数据集存放在OneDrive目录下时,OneDrive的实时同步进程会占用文件,导致修改保存时触发权限冲突,手动修改权限也无法绕过这个同步锁机制。
- 路径空格不一致:代码中第一个
os.listdir的路径末尾带有空格Training Data,但后续拼接的路径是Training Data,这种不一致可能导致部分文件路径解析异常,触发类似权限错误的问题。 - 文件占用冲突:直接在打开文件的状态下保存到原路径,部分系统或文件锁机制会阻止这种操作,表现为权限错误。
针对性解决方案
1. 迁移数据集到本地非同步目录(最推荐)
把Training Data文件夹复制到非OneDrive的本地路径(比如C:/FlowerDataset/Training Data),彻底避开OneDrive的同步锁问题,修改后的代码如下:
import os from PIL import Image target_size = (224, 224) base_dir = 'C:/FlowerDataset/Training Data' for class_name in os.listdir(base_dir): class_dir = os.path.join(base_dir, class_name) if not os.path.isdir(class_dir): continue # 跳过非文件夹的文件,避免报错 for filename in os.listdir(class_dir): image_path = os.path.join(class_dir, filename) try: with Image.open(image_path) as img: img = img.resize(target_size) img.save(image_path) except Exception as e: print(f"处理文件失败 {image_path}: {e}")
2. 修改代码避免原文件占用冲突
如果不想移动数据集,可先将修改后的图片保存到临时文件,再替换原文件,绕过文件占用问题:
import os import shutil from PIL import Image target_size = (224, 224) base_dir = 'C:/Users/myname/OneDrive/Desktop/pyimportant/Automation/Flower Classification V2/V2/Training Data' for class_name in os.listdir(base_dir): class_dir = os.path.join(base_dir, class_name) if not os.path.isdir(class_dir): continue for filename in os.listdir(class_dir): image_path = os.path.join(class_dir, filename) temp_path = image_path + ".tmp" try: with Image.open(image_path) as img: img = img.resize(target_size) img.save(temp_path) # 替换原文件 shutil.move(temp_path, image_path) except Exception as e: print(f"处理文件失败 {image_path}: {e}") # 清理临时文件 if os.path.exists(temp_path): os.remove(temp_path)
3. 修正路径空格问题
确保代码中所有路径的Training Data部分格式一致,要么都带空格要么都不带,避免路径解析错误。比如把第一个os.listdir的路径改成和后续一致的:
for class_name in os.listdir('C:/Users/myname/OneDrive/Desktop/pyimportant/Automation/Flower Classification V2/V2/Training Data'):
内容的提问来源于stack exchange,提问作者bonk
相关产品推荐
相关产品推荐

