Tại sao sử dụng os.path.join thay vì nối chuỗi?


82

Tôi nghĩ rằng tôi không thể nhìn thấy bức tranh lớn hơn ở đây; nhưng về cơ bản tôi không biết tại sao bạn lại sử dụng os.path.jointhay vì chỉ nối chuỗi bình thường?

Tôi chủ yếu sử dụng VBScript nên tôi không hiểu điểm của chức năng này.


Câu trả lời:


81

Xách tay

Viết các thao tác trên đường dẫn tệp một lần và nó hoạt động miễn phí trên nhiều nền tảng khác nhau. Ký tự phân định được trừu tượng hóa đi, giúp công việc của bạn dễ dàng hơn.

Thông minh

Bạn không cần phải lo lắng về việc đường dẫn thư mục đó có dấu gạch chéo hay không . os.path.joinsẽ thêm nó nếu nó cần.

Thông thoáng

Việc sử dụng os.path.joingiúp người khác đọc mã của bạn thấy rõ rằng bạn đang làm việc với các đường dẫn tệp. Mọi người có thể nhanh chóng quét qua mã và phát hiện ra bản chất đó là một đường dẫn tệp. Nếu bạn quyết định tự xây dựng nó, bạn có thể sẽ ngăn cản người đọc tìm ra các vấn đề thực tế với mã của bạn: "Hmm, một số kết nối chuỗi, một sự thay thế. Đây là một đường dẫn tệp hay sao? Gah! Tại sao anh ta không sử dụng os.path.join?" :)


3
Cảm ơn. Phần Thông minh và Rõ ràng chính xác là kiểu lý luận mà tôi đang tìm kiếm khi đặt câu hỏi tương tự với bản thân: phần di động có thể dễ dàng đạt được bằng cách ghép với "/" thay vì "\" chỉ dành cho cửa sổ, vì vậy nó giống như một cuộc tranh luận.
Léo Germond

3
điểm 3 có công, nhưng 1 và 2 là đáng khen. / hoạt động trên Windows. Hệ điều hành nào bạn đang sử dụng không hỗ trợ nó? Và các dấu gạch chéo kép được OS / FS chuẩn hóa cho bạn. Tôi không nói là không sử dụng os.path.join, nhưng nếu bạn có, hãy làm điều đó vì những lý do chính đáng. Có rất nhiều hàng hóa xung quanh os.path.join. "Một sự kiên định ngu ngốc là hobgoblin của những bộ óc nhỏ bé," như họ nói.
hraban

5

Sẽ hoạt động trên Windows với '\' và Unix (bao gồm cả Mac OS X) với '/'.

cho posixpath đây là mã đơn giản

In [22]: os.path.join??
Type:       function
String Form:<function join at 0x107c28ed8>
File:       /usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py
Definition: os.path.join(a, *p)
Source:
def join(a, *p):
    """Join two or more pathname components, inserting '/' as needed.
    If any component is an absolute path, all previous path components
    will be discarded."""
    path = a
    for b in p:
        if b.startswith('/'):
            path = b
        elif path == '' or path.endswith('/'):
            path +=  b
        else:
            path += '/' + b
    return path

không có cửa sổ nhưng cùng một cửa sổ sẽ ở đó với '\'


5
Thật kỳ lạ, tuy nhiên, sử dụng /công trình trên Windows, với CPython ...
Eric O Lebigot

1
Điều này. Tại sao bạn lại thử tự xử lý dấu phân cách đường dẫn, v.v ... khi có một chức năng được thiết kế để làm điều đó cho bạn?
Blair

1
Tôi đọc các bình luận và nó kết nối các đường dẫn với nhau, tôi chỉ không thể hiểu tại sao tôi sẽ sử dụng nó, xin lỗi như tôi đã nói rõ ràng là tôi không nhìn thấy bức tranh lớn hơn.
user1905410 19/12/12

@ user1905410 Nó còn làm được nhiều hơn thế, vì Fine Documentation bao gồm.

@ user1905410 Nó còn làm được nhiều hơn thế, như Tài liệu tốt thèm muốn.

0

Nó độc lập với hệ điều hành. Nếu bạn mã hóa các đường dẫn của mình dưới dạng C: \ Dù chúng sẽ chỉ hoạt động trên Windows. Nếu bạn mã hóa chúng với tiêu chuẩn Unix "/", chúng sẽ chỉ hoạt động trên Unix. os.path.join phát hiện hệ điều hành mà nó đang chạy và tham gia các đường dẫn bằng cách sử dụng đúng ký hiệu.


7
If you hardcode them with the Unix standard "/" they will only work on Unix.Đó là sai lầm. "/" hoạt động tốt trên windows VÀ linux / unix / bsd / darwin.
Léo Germond
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.