2011-09-16 6 views
12

In python, perché è os.path.splitext utilizzando '.' come separatore di estensioni invece di os.extsep?Python splitext

+0

Nessuna risposta ha risposto a questa buona domanda. 'Os.path.splitext' usa effettivamente' '.'', o usa 'os.path.extsep'? I documenti dicono ''.''. –

+1

@Tom: puoi leggere la definizione di 'splitext' qui: http://hg.python.org/cpython/file/d3e072083ff3/Lib/posixpath.py#l108, almeno per python 3.3 ma non è cambiato tanto. – mouad

+0

@mouad - grazie, non ho mai avuto occasione di guardare le fonti prima. Quindi, usa un '' .'' hardcoded invece di 'os.path.extsep'. Sembra uno di quei bug che non saranno bloccati dalla maggior parte delle persone. –

risposta

5

os.extsep è definito importando os.path.extsep. Ma hai ragione, os.path.splitext() utilizza sempre ., indipendentemente os.path.extsep:

Da os.py (3.2.2):

from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep, 
    devnull) 

Da ntpath.py (che diventa 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)) 

Inoltre, da genericpath.py:

def _get_dot(path): 
    if isinstance(path, bytes): 
     return b'.' 
    else: 
     return '.' 

Quindi il os.path() definisce infatti il ​​separatore di estensione due volte.

Ora probabilmente non ha importanza perché non cambierà in qualsiasi momento (è lo stesso su tutte le piattaforme supportate comunque). Ma in un certo senso, viola il principio ASCIUTTO.