প্রস্তাবিত সমাধানগুলি আকর্ষণীয় এবং একটি ভাল রেফারেন্স অফার করে তবে সেগুলি কেবল আংশিকভাবে সন্তুষ্টিজনক। আপনার যখন কোনও একক নির্দিষ্ট কেস থাকে বা আপনি ইনপুট স্ট্রিংয়ের ফর্ম্যাটটি জানেন তখন ম্যানুয়ালি পৃথককারী যুক্ত করা ঠিক আছে তবে জেনেরিক ইনপুটগুলিতে আপনি প্রোগ্রামিকভাবে এটি করতে চান এমন কিছু ক্ষেত্রে থাকতে পারে।
কিছুটা পরীক্ষা-নিরীক্ষার মাধ্যমে, আমি বিশ্বাস করি যে মাপদণ্ডটি হ'ল প্রথম বিভাগটি যদি ড্রাইভ লেটার হয় তবে পথটি ডিলিমিটার যুক্ত করা হয় না, যার অর্থ একটি একক অক্ষর যার পরে একটি কোলন থাকে, এটি সত্যিকারের ইউনিটের সাথে মিল রাখে না কেন।
উদাহরণ স্বরূপ:
import os
testval = ['c:','c:\\','d:','j:','jr:','data:']
for t in testval:
print ('test value: ',t,', join to "folder"',os.path.join(t,'folder'))
test value: c: , join to "folder" c:folder
test value: c:\ , join to "folder" c:\folder
test value: d: , join to "folder" d:folder
test value: j: , join to "folder" j:folder
test value: jr: , join to "folder" jr:\folder
test value: data: , join to "folder" data:\folder
মানদণ্ডগুলির জন্য পরীক্ষা করার এবং কোনও পাথ সংশোধন করার জন্য একটি সুবিধাজনক উপায় os.path.splitdrive
হ'ল পরীক্ষার মানটির সাথে প্রথম ফিরে আসা উপাদানটির তুলনা করে ব্যবহার করা যেতে পারেt+os.path.sep if os.path.splitdrive(t)[0]==t else t
।
পরীক্ষা:
for t in testval:
corrected = t+os.path.sep if os.path.splitdrive(t)[0]==t else t
print ('original: %s\tcorrected: %s'%(t,corrected),' join corrected->',os.path.join(corrected,'folder'))
original: c: corrected: c:\ join corrected-> c:\folder
original: c:\ corrected: c:\ join corrected-> c:\folder
original: d: corrected: d:\ join corrected-> d:\folder
original: j: corrected: j:\ join corrected-> j:\folder
original: jr: corrected: jr: join corrected-> jr:\folder
original: data: corrected: data: join corrected-> data:\folder
পিছনের জায়গাগুলির জন্য এটি আরও দৃust় হতে সম্ভবত উন্নতি করা যেতে পারে এবং আমি এটি কেবল উইন্ডোতে পরীক্ষা করেছি তবে আমি আশা করি এটি একটি ধারণা দেয়। ওস.পাথও দেখুন : আপনি কি এই আচরণটি ব্যাখ্যা করতে পারেন? উইন্ডোজ অন্যান্য সিস্টেমে আকর্ষণীয় বিশদ জন্য।