Các giải pháp được đề xuất rất thú vị và cung cấp một tài liệu tham khảo tốt, tuy nhiên chúng chỉ đáp ứng một phần. Bạn có thể thêm dấu phân tách theo cách thủ công khi bạn có một trường hợp cụ thể hoặc bạn biết định dạng của chuỗi đầu vào, nhưng có thể có trường hợp bạn muốn thực hiện theo chương trình trên các đầu vào chung.
Với một chút thử nghiệm, tôi tin rằng tiêu chí là dấu phân cách đường dẫn không được thêm vào nếu phân đoạn đầu tiên là ký tự ổ đĩa, nghĩa là một ký tự đơn theo sau là dấu hai chấm, bất kể nó có tương ứng với một đơn vị thực hay không.
Ví dụ:
import os
testval = ['c:','c:\\','d:','j:','jr:','data:']
for t in testval:
print ('test value: ',t,', join to "folder"',os.path.join(t,'folder'))
test value: c: , join to "folder" c:folder
test value: c:\ , join to "folder" c:\folder
test value: d: , join to "folder" d:folder
test value: j: , join to "folder" j:folder
test value: jr: , join to "folder" jr:\folder
test value: data: , join to "folder" data:\folder
Một cách thuận tiện để kiểm tra tiêu chí và áp dụng hiệu chỉnh đường dẫn có thể là sử dụng os.path.splitdrive
so sánh phần tử được trả về đầu tiên với giá trị thử nghiệm, chẳng hạn như t+os.path.sep if os.path.splitdrive(t)[0]==t else t
.
Kiểm tra:
for t in testval:
corrected = t+os.path.sep if os.path.splitdrive(t)[0]==t else t
print ('original: %s\tcorrected: %s'%(t,corrected),' join corrected->',os.path.join(corrected,'folder'))
original: c: corrected: c:\ join corrected-> c:\folder
original: c:\ corrected: c:\ join corrected-> c:\folder
original: d: corrected: d:\ join corrected-> d:\folder
original: j: corrected: j:\ join corrected-> j:\folder
original: jr: corrected: jr: join corrected-> jr:\folder
original: data: corrected: data: join corrected-> data:\folder
nó có thể được cải thiện để mạnh mẽ hơn cho các dấu cách ở cuối và tôi đã thử nghiệm nó chỉ trên cửa sổ, nhưng tôi hy vọng nó cho một ý tưởng. Xem thêm Os.path: bạn có thể giải thích hành vi này không? để biết chi tiết thú vị về các hệ thống khác sau đó là cửa sổ.