পাইথনে ডিরেক্টরি বিদ্যমান থাকলে কীভাবে তা সন্ধান করবেন


1135

ইন osপাইথন মধ্যে মডিউল, সেখানে যদি কোন ডিরেক্টরি বিদ্যমান, মত কিছু খুঁজে একটি উপায় হল:

>>> os.direxists(os.path.join(os.getcwd()), 'new_folder')) # in pseudocode
True/False

8
সতর্কতার একটি শব্দ - সর্বাধিক রেট দেওয়া উত্তর জাতি শর্তের জন্য সংবেদনশীল হতে পারে। os.statপরিবর্তে আপনি সঞ্চালন করতে চাইতে পারেন , একই মুহুর্তে ডিরেক্টরি উভয়ই বিদ্যমান এবং একটি ডিরেক্টরি কিনা তা দেখতে।
d33tah

1
@ d33tah আপনার কাছে একটি ভাল পয়েন্ট থাকতে পারে তবে আমি os.statকোনও ফাইল থেকে ডিরেক্টরি বলতে কোনও উপায় দেখছি না । এটি উত্থাপন করে OSErrorযখন পথটি অবৈধ হয়, তা ফাইল বা ডিরেক্টরি যাই হোক না কেন। এছাড়াও, চেক করার পরে যে কোনও কোড রেসের শর্তের জন্যও সংবেদনশীল।
টোমা জ্যাটো - মনিকা

4
@ টোমজাটো: যা এই সিদ্ধান্তে পৌঁছেছে যে এটি কেবল অপারেশন করতে এবং ত্রুটিগুলি পরিচালনা করতে নিরাপদ।
d33tah

2
@ ডেভিড 542 আমি "ইসডির" "উপস্থিত" এর যথার্থতার জন্য পরীক্ষার সাথে একটি স্পেসিফিকেশন কেস যুক্ত করেছি। আমি মনে করি আপনি এখন কিছু শিখতে হবে। তবে এটি নতুন মানুষকে আলোকিত করতে পারে।
জিওস্টোনমার্টেন

উত্তর:


1727

আপনি সন্ধান করছেন os.path.isdir, বা os.path.existsযদি এটি ফাইল বা ডিরেক্টরি না হয় সেদিকে খেয়াল রাখেন না।

উদাহরণ:

import os
print(os.path.isdir("/home/el"))
print(os.path.exists("/home/el/myfile.txt"))

4
@ সাইয়েদরাকিব যদিও প্রথম বন্ধনগুলি কোনও বস্তু কলযোগ্য তা ইঙ্গিত করার জন্য ব্যবহার করা যেতে পারে, পাইথনে এটি দরকারী নয়, এমনকি ক্লাসগুলিও কলযোগ্য। এছাড়াও, ফাংশনগুলি পাইথনের প্রথম শ্রেণীর মান, এবং আপনি এগুলি যেমন প্রথম বন্ধনীর চিহ্ন ছাড়াই ব্যবহার করতে পারেনexisting = filter(os.path.isdir(['/lib', '/usr/lib', '/usr/local/lib'])
ফিহাগ

10
আপনি অন্যান্য ফাংশনগুলিতে যেমন ফাংশনগুলি পাস করতে পারেন map, তবে সাধারণ ক্ষেত্রে, আপনি আর্গুমেন্ট এবং প্রথম বন্ধনী যুক্ত ফাংশনগুলিকে কল করেন। এছাড়াও, আপনার উদাহরণে কিছু টাইপ রয়েছে। সম্ভবত আপনি বলতে চাইছেন filter(os.path.isdir, ['/lib', '/usr/lib', '/usr/local/lib'])
হিউডব্রাউনটি

4
এছাড়াও, os.path.isfile(path)যদি আপনি কেবল এটি কোনও ফাইল কিনা তা নিয়ে যত্নশীল হন।
নিকোলাস

2
সচেতন থাকুন যে কোনও প্ল্যাটফর্মে ফাইল / ডিরেক্টরি উপস্থিত থাকলে এগুলি মিথ্যা ফিরে আসবে, তবে একটি পড়ার অনুমতি ত্রুটিও ঘটে।
কাপলিনেটর

73

খুব কাছে! যদি আপনি বর্তমানে বিদ্যমান ডিরেক্টরিটির নামে পাস করেন তবে os.path.isdirফিরে আসে True। যদি এটির অস্তিত্ব না থাকে বা এটি কোনও ডিরেক্টরি না থাকে তবে এটি ফিরে আসে False


70

পাইথন ৩.৪ স্ট্যান্ডার্ড লাইব্রেরিতে মডিউলটি প্রবর্তন করেছেpathlib , যা ফাইল সিস্টেমের পাথগুলি পরিচালনা করতে একটি অবজেক্ট ওরিয়েন্টেড পদ্ধতির সরবরাহ করে। is_dir()এবং exists()একটি পদ্ধতি Pathবস্তুর প্রশ্নের উত্তর দিতে ব্যবহার করা যেতে পারে:

In [1]: from pathlib import Path

In [2]: p = Path('/usr')

In [3]: p.exists()
Out[3]: True

In [4]: p.is_dir()
Out[4]: True

/অপারেটরের সাথে পাথ (এবং স্ট্রিং) একসাথে যোগদান করা যেতে পারে :

In [5]: q = p / 'bin' / 'vim'

In [6]: q
Out[6]: PosixPath('/usr/bin/vim') 

In [7]: q.exists()
Out[7]: True

In [8]: q.is_dir()
Out[8]: False

পাইথাইব পাইপাই-তে প্যাথলিব 2 মডিউলের মাধ্যমে পাইথন ২.7 এ উপলব্ধ।


কিছু ব্যাখ্যা সহায়ক হবে। আপনি কেন করছেন p / 'bin' / 'vim'? "
নাথান

1
@ ফ্র্যাঙ্ক আমি উত্তরের দ্বিতীয় অংশে কিছুটা বিশদভাবে বর্ণনা করেছি।
joelostblom

34

হ্যাঁ, ব্যবহার os.path.exists()


23
এটি পরীক্ষা করে না যে পাথটি একটি ডিরেক্টরি।
কર્ક স্ট্রুজার

7
ভাল কল. অন্যরা os.path.isdirতা অর্জন করবে বলে উল্লেখ করেছে ।
aganders3

3
যদি আপনি বুঝতে পারেন যে এটি প্রশ্নের উত্তর দেয় না, তবে আপনি উত্তরটি সরাবেন না কেন?

3
@ ক্যামিলস্ট্যাপগুলি এই প্রশ্নটি 354000 বার দেখা হয়েছে (এখন অবধি) এখানে উত্তরগুলি কেবল ওপি-র জন্য নয়, যে কোনও কারণেই এখানে আসতে পারে এমন যে কেউ তার পক্ষে। Aganders3 এর উত্তর প্রাসঙ্গিক এমনকি এটি যদি ওপির সমস্যাটি সরাসরি সমাধান না করে।
গ্যাব্রিয়েল

4
@ গ্যাব্রিয়েল তখন এটি কি করে তা উত্তরে পরিষ্কার করা উচিত।

21

আমরা ফাংশন ইন 2 দিয়ে পরীক্ষা করতে পারি

os.path.isdir("directory")

এটি নির্দিষ্ট ডিরেক্টরি উপলব্ধ বুলিয়ান সত্য দেবে।

os.path.exists("directoryorfile")

নির্দিষ্ট ডিরেক্টরি বা ফাইল উপলব্ধ থাকলে এটি বুলেডকে সত্য দেয়।

পাথটি ডিরেক্টরি কিনা তা পরীক্ষা করতে;

os.path.isdir("directorypath")

পাথ ডিরেক্টরি হলে বুলিয়ান সত্য দেয়


2
এটি পুরানো, শীর্ষের উত্তরের সাথে পুরোপুরি অনর্থক।
ডেভিস হেরিং


10

যেমন:

In [3]: os.path.exists('/d/temp')
Out[3]: True

সম্ভবত একটি os.path.isdir(...)নিশ্চিত করতে টস ।


10

কেবল os.statসংস্করণটি সরবরাহ করতে (পাইথন 2):

import os, stat, errno
def CheckIsDir(directory):
  try:
    return stat.S_ISDIR(os.stat(directory).st_mode)
  except OSError, e:
    if e.errno == errno.ENOENT:
      return False
    raise

7

ওএস আপনাকে এই সমস্ত ক্ষমতা সরবরাহ করে:

import os
os.path.isdir(dir_in) #True/False: check if this is a directory
os.listdir(dir_in)    #gets you a list of all files and directories under dir_in

ইনপুট পাথটি অবৈধ থাকলে তালিকার একটি ব্যতিক্রম ছুঁড়ে দেবে।


5
#You can also check it get help for you

if not os.path.isdir('mydir'):
    print('new directry has been created')
    os.system('mkdir mydir')

6
পাইথন ডিরেক্টরি তৈরির জন্য ফাংশনগুলি os.makedirs('mydir')os.system(...)
অন্তর্নির্মিত করেছে

9
আপনি মুদ্রণ করছেন যে 'নতুন ডিরেক্টরি তৈরি করা হয়েছে' তবে আপনি এটি জানেন না। আপনার যদি ডিরেক্টরি তৈরি করার অনুমতি না থাকে তবে কী হবে? আপনি মুদ্রণ করবেন 'নতুন ডিরেক্টরি তৈরি করা হয়েছে' তবে এটি সত্য হবে না। এটা হবে।
ওয়াজেসিচ জাকুবাস

4

একটি সুবিধাজনক Unipathমডিউল আছে।

>>> from unipath import Path 
>>>  
>>> Path('/var/log').exists()
True
>>> Path('/var/log').isdir()
True

আপনার প্রয়োজন হতে পারে অন্যান্য সম্পর্কিত জিনিস:

>>> Path('/var/log/system.log').parent
Path('/var/log')
>>> Path('/var/log/system.log').ancestor(2)
Path('/var')
>>> Path('/var/log/system.log').listdir()
[Path('/var/foo'), Path('/var/bar')]
>>> (Path('/var/log') + '/system.log').isfile()
True

আপনি এটি পাইপ ব্যবহার করে ইনস্টল করতে পারেন:

$ pip3 install unipath

এটি অন্তর্নির্মিত অনুরূপ pathlib। পার্থক্যটি হ'ল এটি প্রতিটি পাথকে স্ট্রিং হিসাবে বিবেচনা করে ( Pathএটি একটি সাবক্লাস str), তাই যদি কিছু ফাংশন স্ট্রিংয়ের প্রত্যাশা করে তবে আপনি সহজেই Pathএটিকে কোনও স্ট্রিংতে রূপান্তর না করেই কোনও বস্তুটি পাস করতে পারেন ।

উদাহরণস্বরূপ, এটি জাঙ্গো এবং settings.py:

# settings.py
BASE_DIR = Path(__file__).ancestor(2)
STATIC_ROOT = BASE_DIR + '/tmp/static'

4

ডিরেক্টরিটি না থাকলে আপনিও এটি তৈরি করতে চাইতে পারেন।

উত্স , যদি এটি এখনও সেখানে থাকে।

================================================== ===================

পাইথন ≥ 3.5 এ, ব্যবহার করুন pathlib.Path.mkdir:

from pathlib import Path
Path("/my/directory").mkdir(parents=True, exist_ok=True)

পাইথনের পুরানো সংস্করণগুলির জন্য, আমি ভাল গুণাবলীর সাথে দুটি উত্তর দেখতে পাচ্ছি, যার মধ্যে একটি ছোট ত্রুটি রয়েছে, তাই আমি এটিকে আমার গ্রহণ করব:

চেষ্টা করুন os.path.exists, এবং os.makedirsসৃষ্টির জন্য বিবেচনা করুন ।

import os
if not os.path.exists(directory):
    os.makedirs(directory)

মতামত এবং অন্য কোথাও উল্লিখিত হিসাবে, একটি দৌড়ের শর্ত রয়েছে - যদি ডিরেক্টরিটি os.path.existsএবং os.makedirsকলগুলির মধ্যে ডিরেক্টরি তৈরি করা হয় তবে os.makedirsএকটিটি দিয়ে ব্যর্থ হবে OSError। দুর্ভাগ্যক্রমে, কম্বল ধরা OSErrorএবং চালিয়ে যাওয়া নির্বোধ নয়, কারণ এটি অন্যান্য কারণগুলির যেমন ডিরেক্টরি অপর্যাপ্ত অনুমতি, পূর্ণ ডিস্ক ইত্যাদির কারণে ডিরেক্টরিটি তৈরি করতে ব্যর্থতা উপেক্ষা করবে it

একটি বিকল্প হ'ল আটকে থাকা OSErrorএবং এমবেড করা ত্রুটি কোডটি পরীক্ষা করা (দেখুন পাইথনের ওএসইরর থেকে তথ্য পাওয়ার কোনও ক্রস-প্ল্যাটফর্ম উপায় আছে ):

import os, errno

try:
    os.makedirs(directory)
except OSError as e:
    if e.errno != errno.EEXIST:
        raise

বিকল্পভাবে, সেখানে একটি দ্বিতীয় হতে পারে os.path.exists, তবে মনে করুন যে অন্য কেউ প্রথম চেকের পরে ডিরেক্টরি তৈরি করেছে, তারপরে দ্বিতীয়টির আগে এটি সরিয়ে ফেলেছে - আমরা এখনও বোকা হতে পারি।

অ্যাপ্লিকেশনটির উপর নির্ভর করে, সামনের কাজকর্মের ঝুঁকি ফাইল অনুমতিগুলির মতো অন্যান্য কারণগুলির দ্বারা উত্থাপিত বিপদের চেয়ে কম বা কম হতে পারে। বিকাশকারীকে কোনও প্রয়োগকরণ চয়ন করার আগে নির্দিষ্ট অ্যাপ্লিকেশনটি বিকাশিত এবং এর প্রত্যাশিত পরিবেশ সম্পর্কে আরও জানতে হবে।

পাইথনের আধুনিক সংস্করণগুলি এই কোডটি কিছুটা উন্নত করে, উভয়ই প্রকাশ করে FileExistsError(3.3+) ...

try:
    os.makedirs("path/to/directory")
except FileExistsError:
    # directory already exists
    pass

... এবং অনুমতি দিয়ে একটি শব্দ যুক্তি os.makedirsনামকexist_ok (3.2+ মধ্যে)।

os.makedirs("path/to/directory", exist_ok=True)  # succeeds even if directory exists.

0

দুটি জিনিস

  1. ডিরেক্টরি আছে কিনা তা পরীক্ষা করে দেখুন?
  2. যদি না হয় তবে একটি ডিরেক্টরি তৈরি করুন (alচ্ছিক)।
import os
dirpath = "<dirpath>" # Replace the "<dirpath>" with actual directory path.

if os.path.exists(dirpath):
   print("Directory exist")
else: #this is optional if you want to create a directory if doesn't exist.
   os.mkdir(dirpath):
   print("Directory created")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.