İki dosya yolunun Python'da aynı dosyaya işaret edip etmediğini nasıl kontrol edebilirim?Python'daki mutlak yolları kontrol edin
cevap
$ 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
Karşılaştırma için her yolu normalleştirmek için os.path.abspath(path)
kullanmak istiyorsunuz. Karşılaştırmak
os.path.abspath(foo) == os.path.abspath(bar)
Basit dize çalışması gerekir: os.path.abspath
uygulanması sizin için yapar, çünkü bu gereksiz geçerli:
import os
print os.path.abspath(first) == os.path.abspath(second)
Kredi Andrew, o os.path.normpath
bir çağrı dahil benim ilk yazı düzeltildi.
Önce "normpath" çağırmanıza gerek yoktur. –
Andrew: Sadece dizeleri karşılaştıracak olsaydınız, bazı durumlarda aynı dosyaya işaret eden farklı yollarla sonuçlanabilirdiniz. os.abspath akıllıca bir şey yapmaz, sadece bir önek ekler. – jkp
@Andrew: hayır onu geri alıyorum! Haklıydınız, * nix için en azından uygulama sizin için bunu yapıyor. Her gün bir okul günüdür :) – jkp
Windows sistemlerinde, samefile
işlevi yoktur ve ayrıca durum hakkında endişelenmeniz de gerekir. Bu davayı işlemek için os.path
işlevini abspath
ile birleştirebilirsiniz. Windows üzerinde: "\ Spam \ eggs.txt c" ile eşdeğer olarak:
from os.path import abspath, normcase
def are_paths_equivalent(path1, path2):
return normcase(abspath(path1)) == normcase(abspath(path2))
Bu "\ SPAM \ Eggs.txt C" dikkate alınacaktır.
samefile
'dan farklı olarak, yolları normalleştirme ve karşılaştırmaya dayanan tüm yöntemler, tamamen farklı yolların aynı dosyaya başvurduğu durumların farkında olmayacaktır. Windows'da, bu, aynı dosyaya birden çok farklı yol oluşturmak için SUBST, MKLINK veya bağlı ağ paylaşımları kullanırsanız, bu çözümlerin hiçbirinin "aynı dosya" olduğunu söyleyemeyeceğiniz anlamına gelir. Umarım çoğu zaman bir problem değildir.
Windows'da os.path.relpath (yol1, yol2) için os.path.samefile (yol1, yol2) için geçici çözüm olarak kullanılabilir mi?
Eğer os.path.relpath (yol1, yol2) 'i döndürürse. yol1 ve yol2 aynı yere işaret eder
- 1. Bir yolun mutlak veya göreli olup olmadığını kontrol edin
- 2. Dizin yolundaki pythondaki boşluklar
- 3. Precompile'da ARC'yi kontrol edin
- 4. Dizin boşsa kontrol edin
- 5. JavaScript'de tarih kontrol edin
- 6. $ null hızda kontrol edin
- 7. Python - rutini kontrol edin
- 8. Android - Radyo kontrol düğmesini kontrol edin
- 9. Bir dizgenin geçerli olup olmadığını kontrol edin mutlak yol adres biçimi
- 10. Geçerli olduğunu kontrol edin IMEI
- 11. C# veri hizalamasını kontrol edin
- 12. Geçerli bir tarih kontrol edin
- 13. API'dan kontrol edin Twilio dengesi
- 14. Kafka Sırası Boşsa Kontrol Edin
- 15. NSFileManager - Dosya boyutunu kontrol edin?
- 16. Yalancı olup olmadığını kontrol edin
- 17. cmake'de gcc minörünü kontrol edin
- 18. Artık yıl için kontrol edin
- 19. Django'da şablonun izinlerini kontrol edin
- 20. SQL Server'da alfabe kontrol edin
- 21. iOS uygulamasında dili kontrol edin
- 22. Dizide öğe için kontrol edin
- 23. konsoldan krom sürümünü kontrol edin
- 24. Dize içerip içermediğini kontrol edin
- 25. UIView'e dokunuldu mu kontrol edin?
- 26. Kereviz işçisi durumunu kontrol edin
- 27. Parke Komut Satırından Kontrol Edin
- 28. jplayer'ın çalınıp oynamadığını kontrol edin
- 29. Sembolik bağlantı için kontrol edin
- 30. Maven: scm'deki değişiklikleri kontrol edin
Güzel cevap. Bu yöntemi bilmiyordum! – jkp
Bunun yalnızca Unix'te mevcut olduğu belgelenmiştir. Windows'da, en azından Python 2.6'da mevcut değildir. Pencereler için – Weeble
, 'os.stat (' foo ') == os.stat (' bar ') ' – wim