পাইথনের লিনাক্স এবং উইন্ডোজ উভয় ক্ষেত্রে কীভাবে "/" (ডিরেক্টরি বিভাজক) ব্যবহার করবেন?


191

আমি অজগরটিতে একটি কোড লিখেছি যা কোনও ফোল্ডারে একটি নির্দিষ্ট ফাইল তৈরি করতে / ব্যবহার করতে ব্যবহার করে, যদি আমি উইন্ডোতে কোডটি ব্যবহার করতে চাই তবে এটি কার্যকর হবে না, এমন কোনও উপায় আছে যার মাধ্যমে আমি উইন্ডোজ এবং লিনাক্সে কোডটি ব্যবহার করতে পারি?

পাইথনে আমি এই কোডটি ব্যবহার করছি:

pathfile=os.path.dirname(templateFile)
rootTree.write(''+pathfile+'/output/log.txt')

আমি যখন আমার কোডটি উইন্ডোজ মেশিনে ব্যবহার করব তখন আমার কোডটি কাজ করবে না।

আমি লিনাক্স এবং উইন্ডোজ উভয় ক্ষেত্রে কীভাবে "/" (ডিরেক্টরি বিভাজক) ব্যবহার করব?


1
আপনি উইন / * নিক্সের উপর নির্ভর করে শুরুতে এটি সংজ্ঞায়িত করতে পারেন এবং তারপরে ভেরিয়েবলের সাথে কাজ করতে পারেন।
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

12
উইন্ডোতে আপনি \ বা / ডিরেক্টরি বিভাজক হিসাবে ব্যবহার করতে পারেন।
সিকিউরিটিম্যাট

12
উইন্ডোজ /ডিরেক্টরি পাথগুলিতে সমর্থন করে। আপনার কোন নির্দিষ্ট সমস্যা হচ্ছে? কিছু কোড পোস্ট করুন যা সমস্যার চিত্র তুলে ধরে।
মাইকেল গিয়ারি

আপনি যদি উইন্ডোজ ইউজারস্পেস প্রোগ্রামগুলির উপর নির্ভর না করেন তবে ফরোয়ার্ড স্ল্যাশ পাশাপাশি পিছনের কাজ করে। কিছু সেমিডি কমান্ডের এতে সমস্যা আছে।
পাইহান

1
@ মেহরদাদ: আপনি কি এমন একটি উদাহরণ জানেন যা উইন 32 এপিআই '/' গ্রহণ করে না? (cmd.exe এবং অন্যান্য প্রোগ্রাম গণনা করা হয় না)
এরিক সান

উত্তর:


266

ব্যবহার os.path.join()। উদাহরণ: os.path.join(pathfile,"output","log.txt")

আপনার কোডে এটি হবে: rootTree.write(os.path.join(pathfile,"output","log.txt"))


8
os.path.joinএকসাথে বেশ কয়েকটি আপেক্ষিক পাথ উপাদান মেলাতে আরও জটিল যুক্তি ব্যবহার করে। যখন আপনি কেবল তাদের চেইন করতে চান, os.sep.joinসঠিক পছন্দ।
বাচসৌ

108

ব্যবহার করুন:

import os
print os.sep

বর্তমান ওএসে পৃথককারী কীভাবে দেখায় তা দেখতে।
আপনার কোডে আপনি ব্যবহার করতে পারেন:

import os
path = os.path.join('folder_name', 'file_name')


39

os.path.normpath(pathname)এটি উইন্ডোজের /পাথ বিভাজককে বিভাজক হিসাবে রূপান্তরিত করার সাথেও উল্লেখ করা উচিত \। এছাড়া অপ্রয়োজনীয় uplevel রেফারেন্স ... অর্থাত collapses, A/Bএবং A/foo/../Bএবং A/./Bসব হয়ে A/B। আপনি যদি উইন্ডোজ হন তবে এগুলি সব হয়ে যায় A\B


3
এটি প্রশ্নের উত্তর হিসাবে আইএমও হ'ল সেরা উত্তর, "লিনাক্স এবং উইন্ডোজ উভয় ক্ষেত্রে" / "(ডিরেক্টরি বিভাজক) কীভাবে ব্যবহার করবেন"। এবং এটি বিশিষ্টভাবে দরকারী - যখন আমি একটি দীর্ঘ পথ নির্দিষ্ট করার প্রয়োজন তার os.path.normpath('a/b/c/d/file.ext')চেয়ে অনেক বেশি os.path.join('a','b','c','d','file.ext')করতাম।
ukrutt

আমি এই উত্তরটি খুব সহায়ক বলে মনে করেছি। আমি একটি ধারাবাহিক বিভাজক সহ পথ তৈরির জন্য একটি পদ্ধতি খুঁজছিলাম। বিখ্যাত os.path.joinকেবল সরবরাহিত কিছুতে যোগ দেয়। যেমন join("a/b", "c\d")দেয় a/b\c\d(উইন্ডোতে)। কিন্তু আমি আশা ফলাফলের যথাযথ সমন্বয় সঙ্গে পেতে পারেন joinএবং normpathযেমন a\b\c\d(Windows দিকে)
Sumudu

17

আপনি যদি পাইথন ৩.৪++ চালানোর জন্য যথেষ্ট ভাগ্যবান হন তবে আপনি এটি ব্যবহার করতে পারেন pathlib:

from pathlib import Path

path = Path(dir, subdir, filename)  # returns a path of the system's path flavour

বা, সমতুল্য,

path = Path(dir) / subdir / filename

16

কিছু দরকারী লিঙ্ক যা আপনাকে সহায়তা করবে:


2
pathsep? সাধারণত দরকারী, তবে এখানে নয়, আইএমও।
glglgl

2
@glglgl সত্যিই। আমি এটি sepচেয়েছি কিন্তু এটি পোস্ট করার জন্য নিজেকে প্রতিহত করতে পারিনি (আমি ধরে নিয়েছি ওপি ভবিষ্যতের কাজের জন্য এটি দরকারী বলে মনে করবে) :)
মারুন


8

আপনি " os.sep " ব্যবহার করতে পারেন

 import os
 pathfile=os.path.dirname(templateFile)
 directory = str(pathfile)+os.sep+'output'+os.sep+'log.txt'
 rootTree.write(directory)

4

ডিরেক্টরি তৈরি করবেন না এবং নিজের নাম ফাইল করবেন না, পাইথনের অন্তর্ভুক্ত লাইব্রেরি ব্যবহার করুন।

এই ক্ষেত্রে প্রাসঙ্গিকটি হল os.path । বিশেষত যোগদান করুন যা একটি ডিরেক্টরি এবং একটি ফাইলের নাম বা ডিরেক্টরি থেকে একটি নতুন পথের নাম তৈরি করে এবং বিভাজক যা পুরো পথ থেকে ফাইলের নাম পায়।

আপনার উদাহরণ হবে

pathfile=os.path.dirname(templateFile)
p = os.path.join(pathfile, 'output')
p = os.path.join( p, 'log.txt')
rootTree.write(p)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.