Как эффективно проверить правильность последовательности файлов? - PullRequest
0 голосов
/ 10 ноября 2010

Мне нужно проверить каталог на наличие последовательности файлов.

Например, в корневом каталоге необходимо, чтобы в файле с именем: love.dat было 3файлы, связанные с ним, такие, что есть:

love_p.dat
love_r.dat
love_q.dat

Конечно, каталог содержит и другие файлы и каталоги тоже.Но ни один файл, связанный с другим, не находится в разных каталогах.Поэтому, если love.dat находится в корневом каталоге, все связанные с ним файлы также находятся в корневом каталоге.

Я использую java btw, и вся другая доступная мне информация - это список базовых имен файлов с отношениями (например, в приведенном выше сценарии love сохраняется в списке базовых файлов в виде строки love)

1 Ответ

0 голосов
/ 10 ноября 2010

псевдокод:

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))

В частности, обратите внимание, что здесь используются «более умные» манипуляции с именами файлов с использованием метода объединения путей (который зависит от ОС), но весьма вероятно, что нормальное манипулирование строками здесь подойдет; Кроме того, обратите внимание, что он проверяет наличие этих имен - как это сделать, зависит от вашей конкретной среды и языка - в то время как все остальное - просто шаблон для его настройки.

Если «любовь» - это основа, а не буквальное имя, вам нужно динамически добавить его в список имен:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...