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 拆分文本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 使用管道分隔符拆分文本文件,然后根据条件选择列?

如何在python中拆分一个巨大的文本文件

使用 Python 按行号将大文本文件拆分为较小的文本文件

根据两列中的文本拆分行(Python,Pandas)

使用Python将单行的文本拆分为CSV文件中同一列的多行

Python - 用于将文本拆分为句子的正则表达式(句子标记)[重复]