我需要检查一个目录是否存在一系列文件。
例如,在根目录下,要求是如果有一个名为love.dat
的文件,则应该有3个与之相关的文件,以便:
love_p.dat
love_r.dat
love_q.dat
当然,该目录也包含其他文件和目录。但是没有与另一个相关的文件位于不同的目录中。因此,如果love.dat
位于根目录,则其所有相关文件也都位于根目录中。
我正在使用java btw,我可用的所有其他信息是带有关系的基本文件名列表(例如,在上面的场景中,love
作为字符串{{存储在基本文件列表中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