ưu và nhược điểm giữa os.path.exists và os.path.isdir


78

Tôi đang kiểm tra xem thư mục có tồn tại hay không, nhưng tôi nhận thấy rằng tôi đang sử dụng os.path.existsthay vì os.path.isdir. Cả hai đều hoạt động tốt, nhưng tôi tò mò không biết lợi ích của việc sử dụng isdirthay vì là gì exists.

Câu trả lời:


131

os.path.existscũng sẽ trả về Truenếu có một tệp thông thường có tên đó.

os.path.isdirsẽ chỉ trả về Truenếu đường dẫn đó tồn tại và là một thư mục hoặc một liên kết tượng trưng đến một thư mục.


1
os.path.isdirđang trả về true cho tôi trên một liên kết tượng trưng.
Kaz

Tôi đang os.path.isdir('.ipynb_checkpoints')trở lại sự thật
Little Bobby Tables

Trong Python 2.7, os.path.isdir trả về true cho các liên kết tượng trưng đến các thư mục và false cho các liên kết tượng trưng đến các tệp (như mong đợi). Tuy nhiên, điều này có thể gây ra sự cố với os.rmdir vì nó sẽ bị lỗi trên một liên kết tượng trưng ngay cả khi nó là một liên kết tượng trưng đến một thư mục.
Halsafar

6

Giống như âm thanh của nó: nếu đường dẫn tồn tại, nhưng là tệp chứ không phải thư mục, isdirsẽ trả về False. Trong khi đó, existssẽ trở lại Truetrong cả hai trường hợp.


2

os.path.isdir () kiểm tra xem đường dẫn có tồn tại và là một thư mục hay không và trả về TRUE cho trường hợp này.

Tương tự, os.path.isfile () kiểm tra xem đường dẫn có tồn tại và là một tệp hay không và trả về TRUE cho trường hợp này.

Và, os.path.exists () kiểm tra xem đường dẫn có tồn tại hay không và không quan tâm xem đường dẫn có trỏ đến tệp hay thư mục hay không và trả về TRUE trong một trong hai trường hợp.


0

Hầu hết thời gian, nó đều giống nhau.

Tuy nhiên, đường dẫn có thể tồn tại vật lý trong khi path.exists()trả về Sai. Đây là trường hợp nếu os.stat () trả về False cho tệp này.

Nếu đường dẫn tồn tại về mặt vật lý, thì path.isdir()sẽ luôn trả về True. Điều này không phụ thuộc vào nền tảng.


Không rõ đoạn cuối đó có nghĩa là gì. Nếu một thư mục tồn tại vật lý trên một máy chủ từ xa, nhưng tôi không có kết nối mạng nơi tôi đang chạy tập lệnh, thì chắc chắn isdir()không thể biết liệu thư mục có tồn tại hay không.
LarsH

Nếu bạn đang kiểm tra xem thư mục có tồn tại trên đường dẫn UNC hay không, os.path.exists có thể trả về false khi nó thực sự tồn tại (ngay cả khi kết nối đang hoạt động), nhưng os.path.isdir sẽ trả về giá trị chính xác. Đối với tệp trong trường hợp đường dẫn UNC mô phỏng, bạn cũng nên sử dụng os.path.isfile thay vì os.path.exists vì lý do tương tự.
miigotu

0

os.path.exists (đường dẫn) Trả về giá trị True nếu đường dẫn tham chiếu đến một đường dẫn hiện có. Đường dẫn hiện có có thể là các tệp thông thường ( http://en.wikipedia.org/wiki/Unix_file_types#Regular_file ), nhưng cũng có thể là các tệp đặc biệt (ví dụ: thư mục). Vì vậy, về bản chất, hàm này trả về true nếu đường dẫn được cung cấp tồn tại trong hệ thống tệp dưới bất kỳ hình thức nào (mặc dù có một số ngoại lệ như liên kết tượng trưng bị hỏng).

os.path.isdir (đường dẫn) sẽ chỉ trả về true khi đường dẫn trỏ đến một thư mục


1
Điều này không thực sự trả lời câu hỏi của OP, người đang yêu cầu sự khác biệt giữa hai lệnh. Bạn chỉ có một chi tiết.
esqew,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.