文件路径读取不正确

2024-04-19 23:19:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我是DL的新手,我要按一本书来建立我的第一个CNN。问题是(我也尝试过各种方法)我无法让文件打开一个文件夹,无法将一部分图像传输到一个较小的数据集中。下面是代码和错误,我得到当我试图运行我的程序。我试着用我能想到的任何方法改变反斜杠,但我似乎无法让程序签入catsvdogs文件夹的子文件夹。你知道吗

代码:

import os, shutil


# Path to the directory where the original DS was uncompressed

original_dir = 'datasets/catsvdogs'
# Directory to store my smaller dataset

base_dir = 'datasets/catsvdogs_small'
os.mkdir(base_dir)

# Directories for the training, validation, and test splits

train_dir = os.path.join(base_dir, 'train')
os.mkdir(train_dir)
validation_dir = os.path.join(base_dir, 'valid')
os.mkdir(validation_dir)
test_dir = os.path.join(base_dir, 'test')
os.mkdir(test_dir)

# Directory with training cat pictures

train_cats_dir = os.path.join(train_dir, 'cats')
os.mkdir(train_cats_dir)

# Directory with training dog pictures 

train_dogs_dir = os.path.join(train_dir, 'dogs')
os.mkdir(train_dogs_dir)

# Directory with validation cat pictures 

validation_cats_dir = os.path.join(validation_dir, 'cats')
os.mkdir(validation_cats_dir)

# Directory with validation dog pictures

validation_dogs_dir = os.path.join(validation_dir, 'dogs')
os.mkdir(validation_dogs_dir)

# Directory with test cat pictures

test_cats_dir = os.path.join(test_dir, 'cats')
os.mkdir(test_cats_dir)

# Directory with test dog pictures

test_dogs_dir = os.path.join(test_dir, 'dogs')
os.mkdir(test_dogs_dir)

# Copying the first 1000 cat images to train_cats_dir

fnames = ['cat.{}.jpg'.format(i) for i in range(1000)]
for fname in fnames:
    src = os.path.join(original_dir + 'train', fname)
    dst = os.path.join(train_cats_dir, fname)
    shutil.copyfile(src, dst)

我得到的错误:

[Errno 2] No such file or directory: 'datasets/catsvdogstrain\\cat.0.jpg'

Tags: pathtestbaseosdirwithtraindirectory
1条回答
网友
1楼 · 发布于 2024-04-19 23:19:40

所以我认为有两个问题:

  1. 您首先使用Unix样式的斜杠(“/”),但您使用的是windows系统。所以当你打电话的时候操作系统路径连接稍后,还将引入windows样式的斜杠('\\')。这就是为什么在错误消息中可以看到这两种类型的斜杠。你知道吗

要解决此问题,请使用操作系统路径连接创建表示目录的所有字符串(见下文)

  1. 在第三行到最后一行src = os.path.join(original_dir + 'train', fname)中,直接连接两个字符串,而不是用斜杠连接它们。这就是为什么在错误消息中得到datasets/catsvdogstrain,而不是预期的结果 datasets/catsvdogs/train。你知道吗

要解决这个问题:加入原始目录并用操作系统路径连接(见下文)

下面是修复代码的方法:

import os, shutil

# First, use os.path.join to reference your directories.
# That way you automatically pick the right "slash" (i.e. / or \\)
original_dir = os.path.join('datasets', 'catsvdogs')
base_dir = os.path.join('datasets', 'catsvdogs_small')

train_dir = os.path.join(base_dir, 'train')
os.mkdir(train_dir)

train_cats_dir = os.path.join(train_dir, 'cats')
os.mkdir(train_cats_dir)

# Copying the first 1000 cat images to train_cats_dir
fnames = ['cat.{}.jpg'.format(i) for i in range(1000)]
for fname in fnames:

    # This will make a filepath that looks like 'datasets/catsvdogs/train'
    # You directly joined two strings via original_dir + 'train' which
    # gave you 'datasets/catsvdogstrain' in your error message
    src_dir = os.path.join(original_dir, 'train')

    src = os.path.join(src_dir, fname)
    dst = os.path.join(train_cats_dir, fname)

    shutil.copyfile(src, dst)

相关问题 更多 >