Tôi đang học Python và tôi nhận thấy điều gì đó kỳ lạ với một trong các tập lệnh của tôi. Làm một thử nghiệm nhỏ, tôi đã khám phá ra vấn đề bắt nguồn từ hành vi này:Tại sao os.path.join vứt bỏ các đối số?
>>> import os
>>> os.path.join('a','b')
'a/b'
>>> os.path.join('a','/b')
'/b'
Kiểm tra documentation, đây là, trên thực tế, việc thiết kế các chức năng:
os.path. tham gia (path1[, path2[ ... ]])
Tham gia một hoặc nhiều thành phần đường một cách thông minh. Nếu bất kỳ thành phần nào là đường dẫn tuyệt đối, tất cả các thành phần trước đó (trên Windows, bao gồm cả ký tự ổ đĩa trước đó, nếu có) sẽ bị vứt bỏ và tham gia tiếp tục. ...
Câu hỏi của tôi không phải là why my script failed mà là lý do tại sao hàm được thiết kế theo cách này. Tôi có nghĩa là, trên Unix ít nhất, a//b
là một cách hoàn toàn chấp nhận được để chỉ định một con đường, nếu không thanh lịch. Tại sao chức năng được thiết kế theo cách này? Có cách nào để biết liệu một hoặc nhiều phần tử đường dẫn có bị hủy bỏ không trong quá trình kiểm tra từng chuỗi đường dẫn với os.path.isabs()
không?
Ra khỏi tò mò, tôi cũng đã kiểm tra các trường hợp một thành phần đường dẫn kết thúc bằng một nhân vật os.sep
:
>>> os.path.join('a/','b')
'a/b'
đó làm việc như mong đợi.
Một cách dễ dàng, mặc dù không phù hợp để kiểm tra điều này là làm 'filename.lstrip ('/')' – voithos
@voithos Làm cho nó 'filename.lstrip (os.sep)' và nó di động với hầu hết các nền tảng chính. – delnan
@delnan: bạn phải thử nghiệm trên các cửa sổ, nơi nó là 'os.sep +'/''.. –