【问题标题】:How to efficiently check for a proper sequence of files?如何有效地检查正确的文件序列?
【发布时间】:2010-11-10 08:04:25
【问题描述】:

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

例如在根目录,要求如果有一个文件名为:love.dat,那么应该有3个与之相关的文件,这样有:

love_p.dat
love_r.dat
love_q.dat

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

我正在使用 java btw,所有其他可用的信息是具有关系的基本文件名列表(例如,在上述场景中,love 以字符串 love 的形式存储在基本文件列表中)

【问题讨论】:

  • 如果您不告诉我们您使用的环境和编程/脚本语言,这将被关闭为“与编程无关”。 附言这不是威胁,我只是在预测社区对您的问题的反应。以这种形式无法回答
  • 同意。您需要在程序中执行此操作吗?重击?是否需要检查相关文件是否存在的问题?请澄清问题。
  • 您能否提供一些代码来说明您是如何尝试解决这个问题的?

标签: java directory-structure


【解决方案1】:

伪代码:

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

【讨论】:

  • 既然您已经更新了问题,说您正在使用 Java,我上面的伪代码可能不适用,但我至少会留下它,直到有更好的答案,以防它确实有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
  • 2010-12-22
  • 1970-01-01
相关资源
最近更新 更多