Trong trăn, tại sao là os.path.splitext
sử dụng '.' làm dấu phân cách mở rộng thay vì os.extsep
?Python splitext
12
A
Trả lời
5
os.extsep
được xác định bằng cách nhập os.path.extsep
. Nhưng bạn nói đúng, os.path.splitext()
luôn luôn sử dụng .
, bất kể os.path.extsep
:
Từ os.py
(3.2.2):
from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep,
devnull)
Từ ntpath.py
(mà trở nên os.path
)
extsep = '.'
[...]
def _get_dot(path):
if isinstance(path, bytes):
return b'.'
else:
return '.' # instead of return extsep! [Comment by me, not in source]
[...]
def splitext(p):
return genericpath._splitext(p, _get_sep(p), _get_altsep(p),
_get_dot(p))
Ngoài ra, từ genericpath.py
:
def _get_dot(path):
if isinstance(path, bytes):
return b'.'
else:
return '.'
Vì vậy, os.path()
thực tế xác định dấu tách mở rộng hai lần.
Hiện tại, điều này có thể không quan trọng vì nó sẽ không thay đổi bất cứ lúc nào sớm (dù sao cũng giống nhau trên tất cả các nền tảng được hỗ trợ). Nhưng theo một cách nào đó, nó vi phạm nguyên tắc DRY.
Câu trả lời không giải quyết được câu hỏi hay này. Có 'os.path.splitext' thực sự sử dụng' '.'', hay nó sử dụng 'os.path.extsep'? Các tài liệu nói ''.''. –
@Tom: bạn có thể đọc định nghĩa của 'splitext' tại đây: http://hg.python.org/cpython/file/d3e072083ff3/Lib/posixpath.py#l108, ít nhất là cho python 3.3 nhưng nó không thay đổi nhiều. – mouad
@mouad - cảm ơn, không bao giờ có dịp nhìn vào các nguồn trước đây. Vì vậy, nó sử dụng một hardcoded ''.'' thay vì' os.path.extsep'. Có vẻ như một trong những lỗi đó sẽ không bị vấp ngã bởi hầu hết mọi người. –