python os.path.dir 例子

python os.path.dir example

我在 Udacity 上看了一个关于深度学习的在线课程,这个概念是一个简单的分类 not_Mnist dataset.Everything 解释得太好了,但我对其中的部分内容有点困惑如果您有时间帮助我,代码 given.I 将不胜感激! 例如我们有一个 'notMNIST_large.tar.gz' file。 所以一开始我们去掉.tar.gz,根是root = notMNIST_large。之后我们检查是否已经有这个 name.If 的目录,而不是我们从 'notMNIST_large.tar.gz' file 中提取子文件夹,这是我有点困惑的地方......

 num_classes = 10
 np.random.seed(133)

def maybe_extract(filename, force=False):
  root = os.path.splitext(os.path.splitext(filename)[0])[0]  # remove .tar.gz
  if os.path.isdir(root) and not force:
    # You may override by setting force=True.
    print('%s already present - Skipping extraction of %s.' % (root, filename))
  else:
    print('Extracting data for %s. This may take a while. Please wait.' % root)
    tar = tarfile.open(filename)
    sys.stdout.flush()
    tar.extractall(data_root)
    tar.close()
  data_folders = [
    os.path.join(root, d) for d in sorted(os.listdir(root))
    if os.path.isdir(os.path.join(root, d))]
  if len(data_folders) != num_classes:
    raise Exception(
      'Expected %d folders, one per class. Found %d instead.' % (
        num_classes, len(data_folders)))
  print(data_folders)
  return data_folders

train_folders = maybe_extract(train_filename)
test_folders = maybe_extract(test_filename)

因此,如果可能的话,我想对这部分进行解释

data_folders = [
    os.path.join(root, d) for d in sorted(os.listdir(root))
    if os.path.isdir(os.path.join(root, d))]
  if len(data_folders) != num_classes:
    raise Exception(
      'Expected %d folders, one per class. Found %d instead.' % (
        num_classes, len(data_folders))) 

它收集子目录列表并检查是否有它期望的数量。

data_folders = [thing(d) for d in something() if predicate(d)]

是一个 列表理解 ,它循环遍历 something() 的结果并收集 predicateTrue 的那些项目。它将 thing() 应用于这些条目,并在 data_folders.

中收集结果列表

此处,something 是当前目录中文件的列表,predicate 检查该项目是否是目录(而不是,例如,常规文件); thingos.path.join(root,d) 即我们在提取的条目前面添加回 root 目录。

因此,在这种情况下,代码会检查子目录的数量是否与 class 的数量相同(大概每个子目录包含一个 class)。