Hướng dẫn check if file exists python - kiểm tra xem tệp có tồn tại python không
Hiện có sẵn kể từ Python 3.4, nhập và khởi tạo đối tượng 9 với tên tệp và kiểm tra phương thức 0 (lưu ý rằng điều này trả về đúng với các liên kết symlink chỉ vào các tệp thông thường): Show
Nếu bạn đang sử dụng Python 2, bạn có thể quay lại mô -đun Pathlib từ Pypi, 1 hoặc kiểm tra 2 từ mô -đun 3:
Bây giờ những điều trên có lẽ là câu trả lời trực tiếp thực dụng tốt nhất ở đây, nhưng có khả năng một điều kiện chủng tộc (tùy thuộc vào những gì bạn đang cố gắng thực hiện) và thực tế là việc triển khai cơ bản sử dụng 4, nhưng Python sử dụng 4 ở mọi nơi trong thực hiện.Bởi vì Python sử dụng 4 ở khắp mọi nơi, thực sự không có lý do gì để tránh việc thực hiện sử dụng nó.Nhưng phần còn lại của câu trả lời này cố gắng xem xét những cảnh báo này. Dài hơn, câu trả lời giả tạo hơn nhiềuCó sẵn kể từ Python 3.4, sử dụng đối tượng 9 mới trong 8. Lưu ý rằng 9 không hoàn toàn đúng, bởi vì các thư mục không phải là tệp (ngoại trừ theo nghĩa Unix rằng mọi thứ đều là một tệp).
Vì vậy, chúng tôi cần sử dụng 0:
Đây là sự giúp đỡ trên 0:
Vì vậy, chúng ta hãy lấy một tệp mà chúng ta biết là một tệp:
Theo mặc định, 2 xóa tệp khi đóng (và sẽ tự động đóng khi không có thêm tài liệu tham khảo nào tồn tại).
Tuy nhiên, nếu bạn đào sâu vào việc thực hiện, bạn sẽ thấy rằng 0 sử dụng 4:
Điều kiện cuộc đua: Tại sao chúng tôi thích thửChúng tôi thích 4 vì nó tránh được điều kiện chủng tộc. Với 4, bạn chỉ cần cố gắng đọc tệp của mình, hy vọng nó sẽ ở đó, và nếu không, bạn sẽ nắm bắt được ngoại lệ và thực hiện bất kỳ hành vi dự phòng nào có ý nghĩa.Nếu bạn muốn kiểm tra xem một tệp có tồn tại không trước khi bạn cố đọc nó và bạn có thể xóa nó và sau đó bạn có thể sử dụng nhiều luồng hoặc quy trình, hoặc một chương trình khác biết về tệp đó và có thể xóa nó - bạn có nguy cơ Một điều kiện cuộc đua nếu bạn kiểm tra nó tồn tại, bởi vì sau đó bạn đang chạy đua để mở nó trước khi điều kiện (sự tồn tại của nó) thay đổi.race condition if you check it exists, because you are then racing to open it before its condition (its existence) changes. Điều kiện chủng tộc rất khó để gỡ lỗi vì có một cửa sổ rất nhỏ trong đó chúng có thể khiến chương trình của bạn thất bại. Nhưng nếu đây là động lực của bạn, bạn có thể nhận được giá trị của câu lệnh 4 bằng cách sử dụng trình quản lý bối cảnh 8.Tránh các điều kiện chủng tộc mà không có tuyên bố thử: >>> root.is_file() False 8Python 3.4 cung cấp cho chúng tôi Trình quản lý bối cảnh 8 (trước đây là Trình quản lý bối cảnh 1), điều này chính xác về mặt ngữ nghĩa trong ít dòng hơn, trong khi (ít nhất là hời hợt) đáp ứng yêu cầu ban đầu để tránh tuyên bố 4:
Usage:
Đối với Pythons trước đó, bạn có thể tự cuộn 8 của riêng mình, nhưng không có 4 sẽ có nhiều dòng hơn. Tôi tin rằng đây thực sự là câu trả lời duy nhất không sử dụng 4 ở bất kỳ cấp độ nào trong Python có thể được áp dụng cho trước Python 3.4 vì nó sử dụng trình quản lý bối cảnh thay thế: thay vào đó:this actually is the only answer that doesn't use 4 at any level in the Python that can be applied to prior to Python 3.4 because it uses a context manager instead: 0Có lẽ dễ dàng hơn với một thử: 1Các tùy chọn khác không đáp ứng yêu cầu "mà không cần thử":isfile 2Từ các tài liệu: 6 Nhưng nếu bạn kiểm tra nguồn của chức năng này, bạn sẽ thấy nó thực sự sử dụng câu lệnh thử: 3 4Tất cả những gì nó đang làm là sử dụng đường dẫn đã cho để xem liệu nó có thể nhận được số liệu thống kê trên đó không, bắt 9 và sau đó kiểm tra xem đó có phải là tệp không nếu nó không tăng ngoại lệ.Nếu bạn có ý định làm điều gì đó với tệp, tôi sẽ đề nghị trực tiếp thử nó với một thử nghiệm để tránh điều kiện cuộc đua: 5os.access Có sẵn cho Unix và Windows là 0, nhưng để sử dụng, bạn phải vượt qua cờ và nó không phân biệt giữa các tệp và thư mục. Điều này được sử dụng nhiều hơn để kiểm tra xem người dùng gọi thực sự có quyền truy cập trong môi trường đặc quyền nâng cao không: 6Nó cũng bị các vấn đề tình trạng chủng tộc tương tự như 2. Từ các tài liệu:
Tránh sử dụng 0. Đây là một chức năng cấp thấp có nhiều cơ hội cho lỗi người dùng hơn các đối tượng và chức năng cấp cao hơn được thảo luận ở trên.Phê bình về một câu trả lời khác:Một câu trả lời khác nói điều này về 0:
Câu trả lời này cho biết nó thích một phương pháp không giống, dễ bị lỗi, không có lý do. Nó dường như khuyến khích người dùng sử dụng API cấp thấp mà không hiểu chúng. Nó cũng tạo ra một trình quản lý bối cảnh, bằng cách trả lại vô điều kiện 4, cho phép tất cả các trường hợp ngoại lệ (bao gồm 5 và 6!) Để vượt qua âm thầm, đó là một cách tốt để che giấu lỗi.Điều này dường như khuyến khích người dùng áp dụng các hoạt động kém. Làm thế nào để bạn kiểm tra xem một tệp có tồn tại hay không?Kiểm tra xem tệp có tồn tại bằng HĐH không ... đường dẫn. tồn tại (đường dẫn) - trả về true nếu đường dẫn là tệp, thư mục hoặc symlink hợp lệ .. đường dẫn. ISFILE (PATH) - Trả về đúng nếu đường dẫn là tệp thông thường hoặc liên kết với tệp .. đường dẫn. ISDIR (đường dẫn) - Trả về đúng nếu đường dẫn là thư mục hoặc liên kết với thư mục .. Làm cách nào để tìm kiếm một tệp trong Python?Python có thể tìm kiếm tên tệp trong một đường dẫn được chỉ định của HĐH.Điều này có thể được thực hiện bằng cách sử dụng HĐH mô -đun với các chức năng đi bộ ().Điều này sẽ lấy một đường dẫn cụ thể làm đầu vào và tạo ra 3-tuple liên quan đến dirpath, dirnames và tên tệp.using the module os with the walk() functions. This will take a specific path as input and generate a 3-tuple involving dirpath, dirnames, and filenames.
Làm cách nào để kiểm tra xem một tệp tồn tại mà không có ngoại lệ?Để kiểm tra xem một đối tượng đường dẫn có tồn tại độc lập về việc đó là tệp hay thư mục hay không, hãy sử dụng my_path.exists ().my_path.use my_path. exists() . my_path.
Làm thế nào để bạn kiểm tra xem một thư mục có chứa một tệp trong Python không?Mô -đun HĐH trong Python cung cấp các chức năng để tương tác với hệ điều hành.Mô -đun này cung cấp một cách di động để sử dụng chức năng phụ thuộc hệ điều hành.Bây giờ bằng cách gọi phương thức listDir (), chúng ta có thể nhận được một danh sách tất cả các tệp có trong thư mục.by calling listdir() method, we can get a list of all files present in the directory. |