मैक आमतौर पर एचएफएस + फाइल सिस्टम पर काम करते हैं जो पथ को सामान्य करता है। यही है, अगर आप इसमें फ़ाइल के साथ फ़ाइल को सहेजते हैं (u'\xe9'
) उदाहरण के लिए, और फिर os.listdir
करें तो आप देखेंगे कि फ़ाइल नाम u'e\u0301'
में परिवर्तित हो गया है। यह सामान्य यूनिकोड एनएफडी सामान्यीकरण है कि the Python unicodedata
module संभाल सकता है। दुर्भाग्य से एचएफएस + एनएफडी के साथ पूरी तरह से संगत नहीं है, जिसका अर्थ है कि कुछ पथ सामान्य नहीं होंगे, उदाहरण के लिए 福 (u'\ufa1b'
) नहीं बदला जाएगा, हालांकि इसका एनएफडी फॉर्म u'\u798f'
है।मैक ओएस एक्स पथ, लगभग-एनएफडी सामान्य रूप में पथ को कैसे परिवर्तित करें?
तो, पायथन में सामान्यीकरण कैसे करें? जब तक मैं उन्हें पायथन से कॉल कर सकता हूं तब तक मैं देशी एपीआई का उपयोग कर ठीक हूं।
एक बेवकूफ हैक जो काम करना चाहिए: एक अस्थायी फ़ाइल में एक खाली फ़ाइल बनाएं और इसे सूचीबद्ध करें। – Dougal
ध्यान दें कि temp फ़ाइल हैक बहुत महंगा हो जाता है जब आप मानते हैं कि आपको एक पथ पारित किया जा सकता है जो एक गहरी निर्देशिका संरचना का प्रतिनिधित्व करता है। आपको os.makedirs करने और फ़ाइल को स्पर्श करने की आवश्यकता होगी और फिर निर्देशिका संरचना को चलने के लिए देखें कि क्या बनाया गया है। –
संभवतः सामान्यीकरण निर्देशिका और फ़ाइल नामों के बीच संगत है, इसलिए आप भागों को विभाजित कर सकते हैं और केवल उन फ़ाइलों के लिए फाइलें बना सकते हैं जिनमें चलने वाली निर्देशिकाओं से बचने के लिए संभावित रूप से बदलते वर्ण हैं। लेकिन हाँ, यह स्पष्ट रूप से एक बहुत अच्छा समाधान नहीं है। – Dougal