如何有效地检查文件的正确顺序?

时间:2010-11-10 08:04:26

标签: java directory-structure

我需要检查一个目录是否存在一系列文件。

例如,在根目录下,要求是如果有一个名为love.dat的文件,则应该有3个与之相关的文件,以便:

love_p.dat
love_r.dat
love_q.dat

当然,该目录也包含其他文件和目录。但是没有与另一个相关的文件位于不同的目录中。因此,如果love.dat位于根目录,则其所有相关文件也都位于根目录中。

我正在使用java btw,我可用的所有其他信息是带有关系的基本文件名列表(例如,在上面的场景中,love作为字符串{{存储在基本文件列表中1}})

1 个答案:

答案 0 :(得分:0)

伪代码:

def check_directory(directory):
  """Returns whether the directory has all the required names."""
  names = ["love.dat", "love_p.dat", "love_r.dat", "love_q.dat"]
  return all(os.path.exists(os.path.join(directory, x) for x in names))

特别注意,这通过使用路径连接方法(特定于操作系统)来使用“更智能”的文件名操作,但是极其可能正常的字符串操作在这里工作正常;另外请注意它测试是否存在这些名称 - 如何做到这取决于您的确切环境和语言 - 而其余的只是设置它的样板。

如果“love”是词干而不是文字名称,则需要将其动态添加到名称列表中:

def check_directory(directory, stem):
  """Returns whether the directory has all the required names."""
  names = [stem + x for x in [".dat", "_p.dat", "_r.dat", "_q.dat"]]
  return all(os.path.exists(os.path.join(directory, x) for x in names))

print check_directory("/", "love")  # example use

如果你想检查给定目录中所有可能的词干,你只需要遍历该目录中的名称:

def find_file_groups(directory):
  """Returns groups of files as tuples of (base, _p, _r, _q)."""
  for name in os.listdir(directory):
    if name.endswith(".dat"):  # apply more filters if required
      base = name[:-4]  # remove .dat
      names = tuple(base + x for x in [".dat", "_p.dat", "_r.dat", "_q.dat"])
      if all(os.path.exists(os.path.join(directory, x) for x in names)):
        yield names