从keras批处理数据集中根据名称删除文件的最简单和最快的方法

g6ll5ycj  于 2023-05-07  发布在  其他
关注(0)|答案(2)|浏览(196)

嗨,我是Keras的新手,我遇到了一个问题,我试图从我的验证集中删除具有特定名称的图像文件,以便我可以创建一个没有它们的新批处理数据集。手动删除它们不是一个选项,因为我试图实现与在数据集中创建验证集时相同的分割。我正在使用tf.keras.utils.image_dataset_from_directory创建验证集,任何帮助都很感激。
PS:对不起,这是一个愚蠢的问题。

wlzqhblo

wlzqhblo1#

我的回答与@jahantaila的回答非常相似。虽然,我不认为在这里使用os库是一件好事。我用pathlib标准库中的Path类给予了答案。
要在Python上执行文件处理,可以使用标准库pathlib。当你想在Python中浏览/编辑系统上的文件时,这是首选的方法。如果您想进行非常具体的操作,可以使用os库或模块os.path,但您似乎不适合这种情况。
在您的情况下,您似乎要删除一些符合某些条件的文件。下面是一个例子:

from pathlib import Path

def keep_file(file: Path) -> bool:
  # Take decision to keep the file or not
  ... 

# Agnostic OS path with the Path object
folder = Path("path", "to", "folder")

for file in folder.iterdir():
  if not keep_file(file):
    file.unlink()

我邀请您阅读文档中有关路径属性的部分,以了解如何访问文件的信息,如namesuffix等。您需要它们来填充keep_file函数。

s2j5cfk0

s2j5cfk02#

您可以使用Python的os模块根据文件名删除文件。下面是一个示例代码片段,它从目录中删除名称为"example.jpg"的所有文件:

import os

directory = "path/to/validation_set"

for filename in os.listdir(directory):
    if filename == "example.jpg":
        os.remove(os.path.join(directory, filename))

您可以修改此代码,通过将"example.jpg"字符串更改为所需的文件名来删除具有不同名称的文件。在创建tf.keras.utils.image_dataset_from_directory之前放置此代码,以便从目录中删除所需的文件。

import os

directory = "path/to/validation_set"

for filename in os.listdir(directory):
    if filename == "name_to_remove.jpg":
        os.remove(os.path.join(directory, filename))

validation_set = tf.keras.utils.image_dataset_from_directory(
    directory,
    ...
)

请注意,这将永久删除文件,因此如果需要保留它们,请确保您有备份。
希望这有帮助!

相关问题