Python 拆分文本
Posted
技术标签:
【中文标题】Python 拆分文本【英文标题】:Python splitext 【发布时间】:2011-11-18 17:40:08 【问题描述】:在python中,为什么os.path.splitext
使用'.'作为扩展分隔符而不是 os.extsep
?
【问题讨论】:
两个答案都没有解决这个好问题。os.path.splitext
实际使用'.'
,还是使用os.path.extsep
?文档说'.'
。
@Tom:您可以在此处阅读splitext
的定义:hg.python.org/cpython/file/d3e072083ff3/Lib/posixpath.py#l108,至少对于 python 3.3,但它并没有太大变化。
@mouad - 谢谢,以前从未有机会查看源代码。因此,它确实使用硬编码的'.'
而不是os.path.extsep
。似乎是大多数人不会绊倒的错误之一。
@Tom:你没有安装 Python 吗?都在lib
目录下……
@Tim - 我想我确实知道这一点,但如果我不经常使用某些东西,我经常会忘记它。
【参考方案1】:
os.extsep
是通过导入 os.path.extsep
来定义的。但你是对的,os.path.splitext()
总是使用.
,不管os.path.extsep
:
来自os.py
(3.2.2):
from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep,
devnull)
来自ntpath.py
(变为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))
另外,来自genericpath.py
:
def _get_dot(path):
if isinstance(path, bytes):
return b'.'
else:
return '.'
所以os.path()
实际上确实定义了两次扩展分隔符。
现在它可能无关紧要,因为它不会很快改变(无论如何在所有支持的平台上都是一样的)。但在某种程度上,它违反了 DRY 原则。
【讨论】:
以上是关于Python 拆分文本的主要内容,如果未能解决你的问题,请参考以下文章