Python目录路径斜杠混用引发PermissionError权限拒绝问题求助
解决路径斜杠混用导致的PermissionError问题
嘿,我来帮你搞定这个问题!你遇到的PermissionError本质上是手动拼接路径时混用了Windows反斜杠\和Unix风格正斜杠/,系统没法正确解析这个混乱的路径,才抛出了权限相关的错误(其实不一定是真的没权限,而是路径识别失败了)。之前运行pgm没问题,应该是pgm的路径处理逻辑更健壮,而你的Python脚本手动拼路径的方式在环境变化时就踩坑了。
下面给你两个靠谱的解决方案,彻底避免路径拼接的问题:
方案1:用os.path模块构建路径(全系统兼容)
Python内置的os.path.join()会自动根据当前操作系统选择正确的路径分隔符,完全不用你手动加斜杠。修改后的代码如下:
import os from tensorflow.keras.preprocessing import image import numpy as np from tensorflow.keras.applications.vgg16 import preprocess_input PATH = os.getcwd() data_path = os.path.join(PATH, 'data') # 自动拼接正确路径 data_dir_list = os.listdir(data_path) img_data_list = [] for dataset in data_dir_list: dataset_path = os.path.join(data_path, dataset) print(f'Loaded the images of dataset-{dataset}') for img_name in os.listdir(dataset_path): img_path = os.path.join(dataset_path, img_name) img = image.load_img(img_path, target_size=(224, 224)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = preprocess_input(x) print('Input image shape:', x.shape) img_data_list.append(x)
方案2:用pathlib模块(更现代的写法)
Python 3.4+推出的pathlib是面向对象的路径处理工具,代码更简洁易读,同样自动适配系统分隔符:
from pathlib import Path from tensorflow.keras.preprocessing import image import numpy as np from tensorflow.keras.applications.vgg16 import preprocess_input PATH = Path.cwd() data_path = PATH / 'data' # 用/直接拼接路径,太方便了! img_data_list = [] for dataset_dir in data_path.iterdir(): if dataset_dir.is_dir(): # 先确认是目录,避免误处理文件 print(f'Loaded the images of dataset-{dataset_dir.name}') for img_path in dataset_dir.iterdir(): if img_path.is_file(): # 只处理文件,跳过子目录 img = image.load_img(img_path, target_size=(224, 224)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = preprocess_input(x) print('Input image shape:', x.shape) img_data_list.append(x)
额外检查点
如果改完路径还是报错,那就要排查真·权限问题了:
- 确认目标路径
C:\vgg_test\vgg_trial\data\train\DR(修正后的正确路径)确实存在 - 运行Python脚本的用户账号有没有这个目录的读取权限
- 路径里有没有特殊字符、空格?不过用上面两个方法的话,这些都会被自动处理,不用你操心
内容的提问来源于stack exchange,提问作者sachsom
相关产品推荐
相关产品推荐

