2010-11-10 2 views
0

J'ai besoin de vérifier un répertoire pour la présence d'une séquence de fichiers.Comment vérifier efficacement une bonne séquence de fichiers?

Par exemple dans le répertoire racine, l'exigence est que s'il y a un fichier nommé: love.dat, alors il devrait y avoir 3 fichiers relatifs tels qu'il ya:

love_p.dat 
love_r.dat 
love_q.dat 

Bien sûr, le répertoire contient d'autres fichiers ainsi que des répertoires aussi. Mais aucun fichier lié à un autre n'est situé dans des répertoires différents. Donc, si love.dat se trouve dans le répertoire racine, tous ses fichiers connexes se trouvent également dans le répertoire racine.

J'utilise java BTW et toutes les autres informations disponibles pour moi est la liste des noms de fichiers de base des relations (par exemple, dans le scénario ci-dessus, love est stocké dans la liste des fichiers de base comme la chaîne love)

+1

où est le problème? – joni

+0

Ceci sera fermé en tant que "Non lié à la programmation" si vous ne nous dites pas quel environnement et quel langage de programmation/script vous utilisez. * P.S. ce n'est pas une menace, je prédis simplement comment la communauté va réagir à votre question. Il est impossible de répondre sous cette forme * –

+0

Avez-vous besoin de faire cela dans un programme? FRAPPER? Le problème que vous devez vérifier si les fichiers associés existent? S'il vous plaît clarifier la question. –

Répondre

0

pseudocode:

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

en particulier, notez ceci utilise la manipulation de nom de fichier « plus intelligent » en utilisant un procédé d'assemblage chemin (qui est OS spécifique), mais il est extrêmement probable manipulation de chaîne normale fonctionnerait très bien pour cela ici; De plus, notez qu'il teste l'existence de ces noms - comment le faire dépend de votre environnement et de votre langue - alors que le reste est tout simplement simple à mettre en place.

Si « l'amour » est une tige au lieu du nom littéral, vous devez ajouter dynamiquement à la liste des noms:

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 

Et si vous voulez vérifier toutes les possibles tiges dans un répertoire donné, vous avez simplement besoin de faire une boucle sur les noms dans ce répertoire:

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 
+0

Maintenant que vous avez mis à jour la question pour indiquer que vous utilisez Java, mon pseudo-code ci-dessus peut ne pas s'appliquer, mais je le laisse au moins jusqu'à ce qu'il y ait une meilleure réponse au cas où cela aiderait. –

Questions connexes