2010-11-28 5 views
6

हाय में स्लैश अग्रेषित करने के लिए पिछड़े स्लैश को कनवर्ट करें हाय मैंने पिछले लेखों को आगे बढ़ाने के लिए संबंधित लेखों को पढ़ा है। लेकिन सोल स्ट्रिंग का उपयोग करना था।पाइथन

लेकिन मेरे मामले में समस्या है:

मैं एक चर var = करने के लिए गतिशील रूप से फ़ाइल पथ मिल जाएगा 'C: \ dummy_folder \ a.txt' इस मामले मैं स्लैश अग्रेषित करने की यह बदलने की आवश्यकता है। लेकिन '\ a' के कारण, मैं आगे की स्लैश में परिवर्तित नहीं कर पा रहा हूं

मैं इसे कैसे परिवर्तित करूं? या मुझे इस स्ट्रिंग को कच्चे स्ट्रिंग में कैसे बदलना चाहिए ताकि मैं इसे स्लैश

+1

यह स्ट्रिंग "गतिशील रूप से" कहां से आती है? मुख्य स्थान बैकस्लैश का आपके पाइथन प्रोग्राम में एक विशेष अर्थ है आपके पायथन स्रोत कोड स्ट्रिंग अक्षर में, जो स्थैतिक होना चाहिए। –

+0

** ** आप उन्हें क्यों बदलना चाहते हैं? – martineau

+0

विंडोज़ पर, पायथन आउटपुट 'सी: \ path \ to \ file.txt'; हालांकि, मैं गिट बैश में एक कमांड चलाने की इच्छा रखता हूं जो उत्तर के लिए धन्यवाद '/ c/path/to/file.txt' –

उत्तर

12

आगे बढ़ाने के लिए इसे बदल सकूं। बस os.path का उपयोग करें और इसे सबकुछ संभालने दें। आपको स्पष्ट रूप से आगे या पिछड़े स्लैश को सेट नहीं करना चाहिए।

>>> var=r'C:\dummy_folder\a.txt' 
>>> var.replace('\\', '/') 
'C:/dummy_folder/a.txt' 

लेकिन फिर, नहीं। बस os.path का उपयोग करें और खुश रहो!

+0

होना चाहिए, लेकिन मैंने ओएसपीएथ की कोशिश की, लेकिन यह पीछे हटने के लिए पीछे नहीं बदलेगा क्योंकि \ os.path के लिए – abhishek

+0

+1 को परिवर्तित करने से पहले एक ', \ n' संसाधित किया जाएगा। – knutin

+0

अभिषेक, आप इसे ऊपर दिखाए गए तरीके से उपयोग कर सकते हैं, लेकिन आपको नहीं करना चाहिए। – user225312

0
>>> 'C:\\dummy_folder\\a.txt'.replace('\\', '/') 
'C:/dummy_folder/a.txt' 

एक स्ट्रिंग शाब्दिक में, आप \ चरित्र से बचने के लिए की जरूरत है।

+0

सोल के लिए धन्यवाद, आपने एकल पिछड़े स्लैश को 2 पिछड़े स्लैश में कैसे बदल दिया? – abhishek

+1

आपको इसे दो बैकस्लाश के साथ कोड करने की आवश्यकता है। बैकस्लैश एक विशेष चरित्र है, और स्ट्रिंग अक्षर में एक सच्चे बैकस्लैश प्राप्त करने के लिए आपको दो टाइप करने की आवश्यकता है। – marcog

1

कच्चे तार स्ट्रिंग अक्षर (सीधे स्रोत फ़ाइल में लिखे गए) के लिए हैं, जो यहां मामला प्रतीत नहीं होता है। किसी भी मामले में, आगे की स्लैश विशेष वर्ण नहीं हैं - उन्हें बिना किसी समस्या के नियमित स्ट्रिंग में एम्बेड किया जा सकता है। यह बैकस्लाश है जो आमतौर पर स्ट्रिंग में अन्य अर्थ रखती है, और "बच निकलने" की आवश्यकता होती है ताकि उन्हें शाब्दिक बैकस्लाश के रूप में व्याख्या किया जा सके।

आगे साथ बैकस्लैश प्रतिस्थापित करने के लिए स्लैश:

# Python: 
string = r'C:\dummy_folder\a.txt' 
string = string.replace('\\', '/') 

# Ruby: 
string = 'C:\\dummy_folder\\a.txt' 
string = string.gsub('\\', '/') 
2

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

अलग-अलग ओएस के पास किसी दिए गए फ़ाइल के पथ को व्यक्त करने का अलग तरीका होता है, और प्रत्येक आधुनिक प्रोग्रामिंग भाषा में पथ और फ़ाइल सिस्टम संदर्भों को संभालने के लिए स्वयं के तरीके होते हैं। निश्चित रूप से अजगर और रूबी यह है:

तुम सच में तार संभाल करने की जरूरत है:

  • पायथन: string.replace
  • रूबी: string.gsub
11

os.path.normpath() भी है, जो स्थानीय ओएस के आधार पर बैकस्लाश और स्लेश को परिवर्तित करता है। विस्तृत उपयोग जानकारी के लिए कृपया here देखें। आप इसका उपयोग इस तरह करेंगे:

>>> string = r'C:/dummy_folder/a.txt' 
>>> os.path.normpath(string) 
'C:\dummy_folder\a.txt' 
+0

मानदंड को इंगित करने के लिए धन्यवाद, हालांकि, यह केवल एक ही तरीके से काम करता है: आगे स्लेश को वापस स्लेश में परिवर्तित करना। यह दूसरी तरफ काम नहीं करता है (स्लैश अग्रेषित करने के लिए बैक स्लैश)। मुझे लगता है कि लिनक्स पथ मानने का सबसे अच्छा तरीका है और सुनिश्चित करें कि सभी पथ तार अगली स्लैश का उपयोग करें। फिर, स्ट्रिंग पर मानकपथ() को कॉल करने से ठीक पहले कॉल करें। – hopia

+0

यह मेरे लिए सबसे अच्छा जवाब है। मैक ओएस एक्स के तहत, 'os.path.normpath' अपेक्षित के रूप में, आगे slashes को संरक्षित करता है। विंडोज के तहत, स्लेश बैकस्लाश में परिवर्तित हो जाते हैं। – fatuhoku