पायथन में विंडोज पथ


152

उदाहरण के लिए, विंडोज निर्देशिका का प्रतिनिधित्व करने का सबसे अच्छा तरीका क्या है "C:\meshes\as"? मैं एक स्क्रिप्ट को संशोधित करने की कोशिश कर रहा हूं, लेकिन यह कभी भी काम नहीं करता है क्योंकि मैं निर्देशिका को सही प्रतीत नहीं कर सकता हूं, इसलिए मुझे लगता है कि '\'अभिनय के रूप में बच चरित्र के कारण है?

जवाबों:


220

आप हमेशा उपयोग कर सकते हैं:

'C:/mydir'

यह linux और windows दोनों में काम करता है। अन्य सकारात्मकता है

'C:\\mydir'

यदि आपको कुछ नामों से समस्या है, तो आप कच्चे स्ट्रिंग शाब्दिकों को भी आज़मा सकते हैं:

r'C:\mydir'

हालांकि सबसे अच्छा अभ्यास os.pathमॉड्यूल कार्यों का उपयोग करना है जो हमेशा आपके ओएस के लिए सही कॉन्फ़िगरेशन का चयन करें:

os.path.join(mydir, myfile)

अजगर 3.4 से आप पाथलिब मॉड्यूल का भी उपयोग कर सकते हैं । यह ऊपर के समान है:

pathlib.Path(mydir, myfile)

या

pathlib.Path(mydir) / myfile

2
@ गैरेथ, मैं बहुत आलसी हूं और अक्सर '' / '' का इस्तेमाल करते हुए पाया जाता हूं। हालांकि लंबे समय में os.path का उपयोग अधिक सुविधाजनक है। यह आपको चर के रूप में mydir और myfile का उपयोग करने की अनुमति देता है जिसे आप आसानी से संशोधित कर सकते हैं।
जौनकिन

13
केवल एक चीज है सावधान रहने की साथ कच्चे तारों पर है कि वे के साथ \ समाप्त नहीं हो सकता
डगलस Leeder

आप रास्ते को समाप्त करने की आवश्यकता को दूर करने के लिए os.path.join () का उपयोग कर सकते हैं।
विल एडगर

1
मुझे आर (रॉ स्ट्रिंग) सिंटैक्स पसंद है। उपयोगी है यदि आप एक लंबी राह की नकल कर रहे हैं, जहाँ आपको आमतौर पर सभी बैकस्लैश को फॉरवर्ड स्लैश से बदलना होगा
पेटर्ब

कच्ची स्ट्रिंग \\ के साथ समाप्त हो सकती है, इसलिए हम एक फ़ाइल को पथ तक पहुंचा सकते हैं: codecs.open (r "C: \ maXbox \ EKON24 \ tweet_data \\" + फ़ाइल, 'r', एन्कोडिंग = utf-8 ') के रूप में f:
मैक्स क्लेंनर

20

os.pathमॉड्यूल का उपयोग करें ।

os.path.join( "C:", "meshes", "as" )

या कच्चे तार का उपयोग करें

r"C:\meshes\as"

मैं भी पथ या फ़ाइल नाम में कोई स्थान नहीं सुझाऊँगा। और आप अपने तार में डबल बैकस्लैश का उपयोग कर सकते हैं।

"C:\\meshes\\as.jpg"

11
os.path.join तब व्यवहार नहीं कर सकता जैसा कि आप उम्मीद करते हैं जब कोई घटक ड्राइव अक्षर होता है, क्योंकि सापेक्ष पथ की अनुमति तब भी होती है। (पहली पंक्ति का परिणाम विंडोज पर 'C: meshes \\' है।)
डैश-टॉम-बैंग

@ डैश-टॉम-बैंग की टिप्पणी वास्तव में महत्वपूर्ण है। "C:\"पहली प्रविष्टि के रूप में रखना सही बात है ? क्या यह उपयोग करने की स्वच्छता में कुछ गड़बड़ करता है join?
जैक ओ'कॉनर

1
@ JackO'Connor कि मैं क्या करूँ। आप निश्चित रूप "C:\"से फ़ाइल नाम के बीच में नहीं डालना चाहते हैं । इसके अलावा, आप os.path.normpathजुड़ने से पहले या बाद में उपयोग कर सकते हैं , यह सुनिश्चित करने के लिए कि मार्ग अच्छी तरह से मुद्रित हो जाता है।
अगस्टिनो

लेकिन यह भी काम नहीं करता है। क्या काम करता हैos.path.join( "C:\\", "meshes", "as" )
जीन फ़्राँस्वा Fabre

17

हां, \पायथन में स्ट्रिंग लिटरल्स एक एस्केप सीक्वेंस की शुरुआत को दर्शाता है। आपके रास्ते में आपके पास एक वैध दो-वर्ण भागने का क्रम है \a, जो कि ASCII बेल के एक वर्ण में ढह गया है :

>>> '\a'
'\x07'
>>> len('\a')
1
>>> 'C:\meshes\as'
'C:\\meshes\x07s'
>>> print('C:\meshes\as')
C:\meshess

अन्य सामान्य एस्केप सीक्वेंस में \t(टैब), \n(लाइन फीड), \r(कैरिज रिटर्न) शामिल हैं:

>>> list('C:\test')
['C', ':', '\t', 'e', 's', 't']
>>> list('C:\nest')
['C', ':', '\n', 'e', 's', 't']
>>> list('C:\rest')
['C', ':', '\r', 'e', 's', 't']

जैसा कि आप देख सकते हैं, इन सभी उदाहरणों में बैकलेश और शाब्दिक में अगले चरित्र को एक साथ अंतिम स्ट्रिंग में एकल वर्ण बनाने के लिए समूहीकृत किया गया था। पायथन के भागने के दृश्यों की पूरी सूची यहाँ है

इससे निपटने के लिए कई तरीके हैं:

  1. अजगर के साथ उपसर्ग स्ट्रिंग शाब्दिक में भागने दृश्यों को संसाधित नहीं करेंगे rयाR :

    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
  2. विंडोज पर अजगर को आगे के स्लैश को भी संभालना चाहिए।

  3. आप उपयोग कर सकते हैं os.path.join...

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
  4. ... या नया pathlibमॉड्यूल

    >>> from pathlib import Path
    >>> Path('C:', '/', 'meshes', 'as')
    WindowsPath('C:/meshes/as')

-1

PowerShell का उपयोग करें

विंडोज में, आप /अपने रास्ते में लिनक्स या मैकओएस की तरह सभी जगहों पर उपयोग कर सकते हैं जब तक आप अपने कमांड लाइन इंटरफेस के रूप में पावरशेल का उपयोग करते हैं। यह विंडोज पर पहले से इंस्टॉल आता है और यह कमांड जैसे कई लिनक्स कमांड को सपोर्ट करता है ls

यदि आप Windows कमांड प्रॉम्प्ट का उपयोग करते हैं (जो कि आपके cmdद्वारा विंडोज स्टार्ट मेनू में टाइप करने पर प्रकट होता है ), तो आपको \इसके अंदर सिर्फ पथ निर्दिष्ट करने की आवश्यकता है। आप /अन्य सभी स्थानों (कोड संपादक, पायथन इंटरेक्टिव मोड, आदि) में पथ का उपयोग कर सकते हैं ।


-1

यदि आप अन्य स्रोत से विंडो पथ पेस्ट करना चाहते हैं (जैसे, फ़ाइल एक्सप्लोरर) - आप input()अजगर कंसोल में कॉल के माध्यम से ऐसा कर सकते हैं :

>>> input()
D:\EP\stuff\1111\this_is_a_long_path\you_dont_want\to_type\or_edit_by_hand
'D:\\EP\\stuff\\1111\\this_is_a_long_path\\you_dont_want\\to_type\\or_edit_by_hand'

तो बस परिणाम की प्रतिलिपि बनाएँ

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.