2009-07-24 12 views
0

J'ai écrit une fonction dans Python, qui doit retourner le fichier à partir du dossier spécifique et de tous les sous-dossiers. Nom du fichier pris du paramètre de fonction:Retour des fichiers uniquement à partir du dossier spécifique

def ReturnFile(fileName) 
    return open("C:\\folder\\" + fileName,"r") 

Mais comme fileName vous pouvez passer par exemple. "..\\Windows\\passwords.txt "ou des symboles unicode pour les points

Résolution du problème Certains RegExp peut-être

+0

Que voulez-vous faire? Vérifiez que la chaîne donnée comme nom de fichier est un nom de fichier valide? – luc

+0

Je veux que ce programme puisse renvoyer des fichiers d'un seul dossier (et sous-dossiers), et être sûr que personne ne puisse donner de paramètre avec ex. ".." et lire tous les fichiers sur le serveur. –

+0

Voir: http://stackoverflow.com/questions/120656/directory-listing-in-python, http://stackoverflow.com/questions/973473/getting-a-list-of-all-subdirectories-in-the -current-directory –

Répondre

4

Le? os.path.normpath fonction normalise un chemin donné py résoudre des choses comme "..". Ensuite, vous pouvez vérifier si le chemin résultant est dans le répertoire attendu:

def ReturnFile(fileName) 
    norm = os.path.abspath("C:\\folder\\" + fileName) 
    if not norm.startswith("C:\\folder\\"): 
    raise Exception("Invalid filename specified") 
    return open(norm,"r") 
1

Et à ce sujet:

import os 

_BASE_PATH= "C:\\folder\\" 

def return_file(file_name): 
    "Return File Object from Base Path named `file_name`" 
    os.path.normpath(file_name).split(os.path.sep)[-1] 
    return(open(_BASE_PATH+file_name)) 
+0

Sur les fenêtres: '>>> r '../../ AUTOEXEC.BAT'.split (os.path.sep) [- 1]' Résultats dans: '' ../../AUTOEXEC .BAT''. – SilentGhost

+0

Ouais c'est vrai, lorsque l'utilisation de la fraction de texte brut peut ne pas fonctionner comme prévu. J'ai mis à jour ma réponse, merci. –

Questions connexes