2011-09-16 27 views
12

पायथन में, os.path.splitext क्यों '।' का उपयोग कर रहा है os.extsep के बजाय विस्तार विभाजक के रूप में?पायथन स्प्लिटेक्स्ट

+0

न तो उत्तर ने इस अच्छे प्रश्न को संबोधित किया है। क्या 'os.path.splitext' वास्तव में '' '' का उपयोग करता है, या यह 'os.path.extsep' का उपयोग करता है? दस्तावेज़ कहते हैं ''। '। –

+1

@ टॉम: आप यहां 'splitext' की परिभाषा पढ़ सकते हैं: http://hg.python.org/cpython/file/d3e072083ff3/Lib/posixpath.py#l108, कम से कम पायथन 3.3 के लिए लेकिन यह नहीं बदला बहुत। – mouad

+0

@mouad - धन्यवाद, पहले कभी स्रोतों को देखने का अवसर नहीं था। इसलिए, यह 'os.path.extsep' के बजाय हार्डकोडेड' '' 'का उपयोग करता है। ऐसा लगता है कि उन बगों में से एक जो ज्यादातर लोगों द्वारा नहीं छोड़ा जाएगा। –

उत्तर

5

os.extsepos.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() वास्तव में विस्तार विभाजक को दो बार परिभाषित करता है।

अब यह कोई फर्क नहीं पड़ता क्योंकि यह जल्द ही कभी भी नहीं बदला जा रहा है (यह वैसे भी सभी समर्थित प्लेटफ़ॉर्म पर समान है)। लेकिन एक तरह से, यह डीआरवाई सिद्धांत का उल्लंघन करता है।