Comment puis-je vérifier si deux chemins de fichier pointent vers le même fichier en Python?Vérifier les chemins absolus en Python
Répondre
$ touch foo
$ ln -s foo bar
$ python
Python 2.5.1 (r251:54863, Feb 6 2009, 19:02:12)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> help(os.path.samefile)
Help on function samefile in module posixpath:
samefile(f1, f2)
Test whether two pathnames reference the same actual file
>>> os.path.samefile("foo", "bar")
True
Vous souhaitez utiliser os.path.abspath(path)
pour normaliser chaque chemin à des fins de comparaison.
os.path.abspath(foo) == os.path.abspath(bar)
Une chaîne simple comparaison devrait fonctionner:
import os
print os.path.abspath(first) == os.path.abspath(second)
crédit à Andrew, il a corrigé mon post initial qui comprenait un appel à os.path.normpath
: cela est inutile parce que la mise en œuvre de os.path.abspath
fait pour vous.
Vous n'avez pas besoin d'appeler 'normpath' en premier. –
Andrew: si vous vouliez juste comparer les chaînes, vous pouvez vous retrouver avec des chemins différents pointant vers le même fichier dans certains cas. os.abspath ne fait rien d'intelligent, il ajoute seulement un préfixe. – jkp
@Andrew: non je le reprends! Vous aviez raison, pour * nix au moins l'implémentation le fait pour vous. Chaque jour est un jour d'école :) – jkp
Sur les systèmes Windows, il n'y a pas de fonction samefile
et vous devez également vous soucier de la casse. La fonction normcase
de os.path
peut être combinée avec abspath
pour gérer ce cas.
from os.path import abspath, normcase
def are_paths_equivalent(path1, path2):
return normcase(abspath(path1)) == normcase(abspath(path2))
Cette examinera "C: \ SPAM \ Eggs.txt" équivalent à "c: \ Spam \ eggs.txt" sous Windows.
Notez que contrairement à samefile
, toutes les méthodes basées sur la normalisation et la comparaison des chemins ne seront pas au courant des cas où des chemins complètement différents se réfèrent au même fichier. Sous Windows, cela signifie que si vous utilisez SUBST, MKLINK ou des partages réseau montés pour créer plusieurs chemins distincts vers le même fichier, aucune de ces solutions ne pourra dire "c'est le même fichier". J'espère que ce n'est pas trop un problème la plupart du temps.
Peut-on utiliser os.path.relpath (path1, path2) comme solution de contournement pour os.path.samefile (path1, path2) sous Windows?
Si os.path.relpath (chemin1, chemin2) renvoie '.' que path1 et path2 pointent vers le même endroit
- 1. Les chemins absolus pour PHP incluent
- 2. CSS Intellisense de Visual Studio - Chemins absolus et fichiers MasterPage
- 3. Firefox Ajouter ON - Pour vérifier les liens absolus et relatifs
- 4. Gestion SVN sur un projet qui utilise des chemins absolus
- 5. Comment créer rapidement des alias avec des chemins absolus?
- 6. Comment puis-je utiliser javascript pour convertir les attributs href relatifs en chemins absolus?
- 7. Création de sous-domaines à chemins absolus avec .htaccess
- 8. vérifier les permissions des répertoires en python
- 9. Comment puis-je m'assurer que le module de recherche de Ruby retournera toujours des chemins absolus?
- 10. Python - Faire importations en termes absolus à partir d'un sous-dossier
- 11. Navigation Web via les chemins
- 12. Chemins dans les pages maîtres
- 13. Comment vérifier si je cours sous Windows en Python?
- 14. Récupération des chemins des instances FileSystemInfo
- 15. Comment vérifier qu'un chemin a un bit collant en python?
- 16. Comment rendre les liens de mon RoR absolus?
- 17. IIS6 301 rediriger tout en conservant les chemins
- 18. UITableView: Vérifier les lignes en mode édition
- 19. Quels sont les coûts absolus et relatifs des différentes opérations en PHP?
- 20. Éléments de positionnement absolus dans div divisible
- 21. remplacer les chemins d'URL à l'aide Regex
- 22. Expliquer les chemins relatifs - VWD vs IIS
- 23. Distinction entre les chemins de contrôle d'exécution
- 24. Chemins Win32 en tant que cibles/dépendances
- 25. Liste/tableaux - Vérifier les dates
- 26. Supprimer les caractères en Python
- 27. Que définit Uri.LocalPath à faire avec les chemins non locaux?
- 28. Interception de tous les chemins relatifs
- 29. Obtenir les chemins des dossiers Vista
- 30. php inclure, tous les chemins se foirent
Bonne réponse. Je ne savais pas à propos de cette méthode! – jkp
Notez que ceci est documenté comme étant uniquement disponible sous Unix. Il n'est pas présent sur Windows, au moins en Python 2.6. – Weeble
pour Windows, vous pouvez approximer le comportement avec 'os.stat ('foo') == os.stat ('bar')' – wim