Tôi có một tập lệnh tìm kiếm một thư mục chứa một tệp cụ thể, bắt đầu từ thư mục hiện tại và đi lên cây (nghĩ đến việc tìm ra thư mục .git
nằm ở đâu).Kiểm tra xem thư mục có phải là một hệ thống tập tin (root system)
Phương pháp của tôi trông như thế này:
def getDir(self,cwd):
path = os.path.abspath(cwd)
if not os.path.isdir(path):
raise RuntimeError("getDir should not be run on files")
if FILE in os.listdir(path):
return path
parent = os.path.join(path, os.path.pardir)
if os.access(parent, os.R_OK) and os.access(parent, os.X_OK):
return self.getDir(parent)
else
return None
Bây giờ vấn đề với phương pháp này là, nếu nó không thể tìm thấy thư mục, nó bẹ (và cuối cùng ngăn xếp tràn) vì rõ ràng khi tham gia /
và ..
mang đến cho bạn /
lần nữa. Tôi đã thử so sánh path
với parent
hoặc repr
của chúng, nhưng điều đó không hoạt động (chúng luôn khác biệt). Cách giải quyết của tôi bây giờ là bao gồm một bộ đếm chiều sâu trong phương thức đệ quy và dừng lại ở một ngưỡng tối đa ngẫu nhiên nào đó.
Câu hỏi của tôi là như vậy, có cách đáng tin cậy trên nhiều nền tảng để kiểm tra xem tôi đã đạt đến thư mục gốc trong hệ thống tệp không?
Tôi không hoàn toàn chắc chắn nếu nó là đáng tin cậy trên tất cả các nền tảng, nhưng nếu os.path.dirname (đường dẫn) == đường dẫn, sau đó nó có vẻ như đường dẫn là gốc. –