ব্যতিক্রম ব্যতীত কোনও ফাইল উপস্থিত আছে কিনা তা আমি কীভাবে পরীক্ষা করব?


5599

tryবিবৃতি ব্যবহার না করে কোনও ফাইল উপস্থিত রয়েছে কি না তা আমি কীভাবে চেক করব ?


2
এই বনাম LBYL আলোচনা শাস্ত্রীয় EAFP মনে করা হয় এই সংশ্লিষ্ট প্রশ্ন যেমন দেখুন: stackoverflow.com/questions/1835756/using-try-vs-if-in-python
matth

এছাড়াও আপনি এটি ডিস্কে উপস্থিত কিনা তা জানতে চাইলে (সরাসরি বা প্রতীকী লিঙ্ক হিসাবে), আপনি যদি এটি থেকে পড়তে পারেন, বা আপনি এটিতে লিখতে পারেন তবে এটি প্রাসঙ্গিক।
থরবজর্ন রাভন অ্যান্ডারসন

উত্তর:


5150

যদি আপনি যাচাই করার কারণটি হন তবে আপনি যেমন কিছু করতে পারেন তবে if file_exists: open_it()এটি tryখোলার প্রয়াসের চারপাশে ব্যবহার করা আরও নিরাপদ । চেক করা এবং তারপরে খোলার ফলে ফাইলটি মুছে ফেলা বা সরিয়ে নেওয়া বা আপনি যখন যাচাই করেন এবং যখন আপনি এটি খোলার চেষ্টা করেন তখন এর মধ্যে কিছু ঝুঁকিপূর্ণ হয়।

আপনি যদি ফাইলটি তাত্ক্ষণিকভাবে খোলার পরিকল্পনা না করেন তবে আপনি এটি ব্যবহার করতে পারেন os.path.isfile

Trueপথে যদি কোনও নিয়মিত ফাইল থাকে তবে ফিরে আসুন । এটি প্রতীকী লিঙ্কগুলি অনুসরণ করে, সুতরাং islink () এবং isfile () উভয়ই একই পথের জন্য সত্য হতে পারে।

import os.path
os.path.isfile(fname) 

আপনার যদি নিশ্চিত হওয়া দরকার তবে এটি একটি ফাইল।

পাইথন ৩.৪ দিয়ে শুরু করে pathlibমডিউলটি একটি অবজেক্ট-ভিত্তিক পদ্ধতির প্রস্তাব দেয় ( pathlib2পাইথন ২.7 এ ব্যাকপোর্ট করা হয়েছে):

from pathlib import Path

my_file = Path("/path/to/file")
if my_file.is_file():
    # file exists

ডিরেক্টরি চেক করতে, করুন:

if my_file.is_dir():
    # directory exists

কোনও Pathবস্তু এটি ফাইল বা ডিরেক্টরি কিনা তা স্বাধীনভাবে বিদ্যমান কিনা তা পরীক্ষা করতে , ব্যবহার করুন exists():

if my_file.exists():
    # path exists

আপনি resolve(strict=True)একটি tryব্লকেও ব্যবহার করতে পারেন :

try:
    my_abs_path = my_file.resolve(strict=True)
except FileNotFoundError:
    # doesn't exist
else:
    # exists

40
প্রথম মন্তব্য সম্পর্কে (খোলার আগে চেক করা হলে "চেষ্টা করুন" ব্যবহার করুন) দুর্ভাগ্যক্রমে আপনি যদি এটি যোগ করার জন্য খোলার চান তবে এটি কাজ করবে না এটি নিশ্চিত হওয়ার আগে এটি 'অ' মোড তৈরি না হওয়ার আগে তৈরি হবে।
মাকাপুফ

6
লক্ষ্য করুন FileNotFoundErrorপাইথন 3. চালু হয় আপনার কাছে পাইথন 2.7 সেইসাথে পাইথন 3 সমর্থন করার জন্য প্রয়োজন হয়, তাহলে আপনি ব্যবহার করতে পারেন IOErrorপরিবর্তে (যা FileNotFoundErrorউপশ্রেণী) stackoverflow.com/a/21368457/1960959
scottclowe

7
@ মাকাপুফ আপনি এটি "আপডেট করার জন্য" খুলতে পারেন ( open('file', 'r+')) এবং তারপরে শেষের দিকে যেতে চেষ্টা করুন।
কিরিল

2
@ কিরিল ওপেন-এন্ড সিক-টু-দ্য-এন্ড-ওপেন-ফর-অ্যাপেন্ড (অন্ততপক্ষে পিক্সিক সিস্টেমে) একই জিনিস নয়। "অ্যাপেনড মোড" ফাইলের শেষে সর্বদা সঠিকভাবে লিখবে, এমনকি যখন অন্য জিনিসগুলি ফাইলটি খোলার সময় এবং লেখার মধ্যবর্তী সময়ে পরিবর্তিত হয়। লেখার / আপডেটের জন্য উন্মুক্ত করা এবং একাধিক জিনিস একই সময়ে একই ফাইলে লেখার চেষ্টা করলে ফাইলের ডেটা দূষিত করার ঝুঁকি থাকে। দুর্ভাগ্যক্রমে, আমি বিশ্বাস করি যে ফাইলটি আগে উপস্থিত রয়েছে তা নিশ্চিত করার জন্য অন-আপেনের একমাত্র রেস-কন্ডিশন-নিরাপদ উপায় হ'ল পরিবর্তে নিম্ন-স্তরের os.open () রুটিনগুলি (O_CREAT ছাড়াই O_APPEND) ব্যবহার করা।
ফুগড

1
@ লরিঞ্জি জেডসিগমন্ড যা বাস্তবায়ন-নির্ভর আচরণ বলে মনে হচ্ছে। একটি উত্স ভাগ করে যত্ন?
কিরিল

2110

আপনার os.path.existsকাজটি রয়েছে:

import os.path
os.path.exists(file_path)

এটি Trueফাইল এবং ডিরেক্টরি উভয়ের জন্যই ফিরে আসে তবে আপনি পরিবর্তে এটি ব্যবহার করতে পারেন

os.path.isfile(file_path)

এটি বিশেষত কোনও ফাইল কিনা তা পরীক্ষা করতে। এটি symlinks অনুসরণ করে।


965

বিপরীতে isfile(), ডিরেক্টরিতে exists()ফিরে আসবে True। আপনি শুধুমাত্র প্লেইন ফাইল বা এছাড়াও ডিরেক্টরি চান তার উপর নির্ভর করে সুতরাং, আপনি ব্যবহার করব isfile()বা exists()। এখানে কিছু সাধারণ রিপেল আউটপুট দেওয়া হচ্ছে:

>>> os.path.isfile("/etc/password.txt")
True
>>> os.path.isfile("/etc")
False
>>> os.path.isfile("/does/not/exist")
False
>>> os.path.exists("/etc/password.txt")
True
>>> os.path.exists("/etc")
True
>>> os.path.exists("/does/not/exist")
False


319

ব্যবহার করুন os.path.isfile()সঙ্গে os.access():

import os

PATH = './file.txt'
if os.path.isfile(PATH) and os.access(PATH, os.R_OK):
    print("File exists and is readable")
else:
    print("Either the file is missing or not readable")

60
একাধিক শর্ত থাকা, যার মধ্যে কিছু অতিরিক্ত অতিরিক্ত, কম পরিষ্কার এবং স্পষ্ট।
wim

10
এটিও নিরর্থক। যদি ফাইলটি না থাকে তবে os.access()মিথ্যা ফিরবে।
ব্যবহারকারী 207421

9
@EJP- এ লিনাক্স ফাইল থাকতে পারে তবে অ্যাক্সেসযোগ্য নয়।
ই তথ্য 128

8
যেহেতু আপনি import os, তাই আপনার আর প্রয়োজন হবে import os.pathনা কারণ এটি ইতিমধ্যে অংশ os। আপনার কেবলমাত্র আমদানি করা দরকার os.pathযদি আপনি কেবল নিজের os.pathথেকে osনয় বরং কোনও ছোট জিনিসটি আমদানি করতে ফাংশন ব্যবহার করতে যাচ্ছেন তবে আপনি যেমন ব্যবহার করেন os.accessএবং os.R_OKদ্বিতীয় আমদানির প্রয়োজন হয় না।
জেসের

285
import os
os.path.exists(path) # Returns whether the path (directory or file) exists or not
os.path.isfile(path) # Returns whether the file exists or not

1
সাধারণত, পদ্ধতির নামের মতো ভেরিয়েবলের নামকরণের জন্য ভাল অনুশীলন নয়।
হোমুনকুলাস রেটিকুলি

245

যদিও প্রায় প্রতিটি সম্ভাব্য উপায় বিদ্যমান উত্তরগুলিতে (কমপক্ষে একটির মধ্যে) তালিকাভুক্ত করা হয়েছে (উদাহরণস্বরূপ পাইথন ৩.৪ নির্দিষ্ট জিনিস যুক্ত করা হয়েছিল), তবে আমি সমস্ত কিছু একসাথে ভাগ করে নেওয়ার চেষ্টা করব।

দ্রষ্টব্য : পাইথন স্ট্যান্ডার্ড লাইব্রেরি কোডের প্রতিটি অংশ যা আমি পোস্ট করতে যাচ্ছি এটি সংস্করণ 3.5.3 এর সাথে সম্পর্কিত

সমস্যার বিবৃতি :

  1. ফাইল পরীক্ষা করুন ( তর্কযোগ্য : এছাড়াও ফোল্ডার ("বিশেষ" ফাইল))? অস্তিত্ব
  2. চেষ্টা করুন / বাদে / অন্য / অবশেষে ব্লক ব্যবহার করবেন না

সম্ভাব্য সমাধান :

  1. [পাইথন 3]: os.path। বিদ্যমান ( পথ ) (এছাড়াও মত অন্যান্য ফাংশন পরিবারের সদস্যদের পরীক্ষা os.path.isfile, os.path.isdir, os.path.lexistsকিছুটা ভিন্ন আচরণে জন্য)

    os.path.exists(path)

    পাথTrue যদি কোনও বিদ্যমান পাথ বা একটি উন্মুক্ত ফাইল বর্ণনাকারীকে বোঝায় তবে ফিরে আসুন । ভাঙা প্রতীকী লিঙ্কগুলির জন্য ফিরে আসে । কিছু প্ল্যাটফর্মে, অনুরোধ করা ফাইলটিতে OS.stat () চালানোর অনুমতি না দেওয়া হলেও, পথটি শারীরিকভাবে বিদ্যমান থাকলেও এই ফাংশনটি ফিরে আসতে পারে ।FalseFalse

    সমস্ত ভাল, তবে আমদানি গাছ অনুসরণ করে:

    • os.path- posixpath.py ( ntpath.py )

      • জেনেরিকপথ.পি , লাইন ~ # 20 +

        def exists(path):
            """Test whether a path exists.  Returns False for broken symbolic links"""
            try:
                st = os.stat(path)
            except os.error:
                return False
            return True

    এটি [পাইথন 3] এর আশপাশে কেবল একটি চেষ্টা / ব্লক ব্যতীত : ওএস। স্ট্যাটাস ( পথ, *, dir_fd = কিছুই নয়, অনুসরণ_সৃঙ্খলাগুলি = সত্য ) । সুতরাং, আপনার কোডটি হল চেষ্টা / ব্যতীত মুক্ত, কিন্তু framestack কম সেখানে (অন্তত) এর এক ধরনের ব্লক। এটি অন্যান্য ফানকগুলিতে ( সহ os.path.isfile ) প্রযোজ্য ।

    1.1। [পাইথন 3]: পথ। is_file ()

    • এটি পাথ পরিচালনা করার উপায় একটি ফ্যানসিয়ার (এবং আরও অজগর আইসিস), কিন্তু
    • হুডের নীচে, এটি ঠিক একই জিনিসটি করে ( প্যাথলিব.পি , লাইন ~ # 1330 ):

      def is_file(self):
          """
          Whether this path is a regular file (also True for symlinks pointing
          to regular files).
          """
          try:
              return S_ISREG(self.stat().st_mode)
          except OSError as e:
              if e.errno not in (ENOENT, ENOTDIR):
                  raise
              # Path doesn't exist or is a broken symlink
              # (see https://bitbucket.org/pitrou/pathlib/issue/12/)
              return False
  2. [পাইথন 3]: বিবৃতি প্রসঙ্গে পরিচালকগণের সাথে । উভয় ক্ষেত্রেই:

    • একটি তৈরী কর:

      class Swallow:  # Dummy example
          swallowed_exceptions = (FileNotFoundError,)
      
          def __enter__(self):
              print("Entering...")
      
          def __exit__(self, exc_type, exc_value, exc_traceback):
              print("Exiting:", exc_type, exc_value, exc_traceback)
              return exc_type in Swallow.swallowed_exceptions  # only swallow FileNotFoundError (not e.g. TypeError - if the user passes a wrong argument like None or float or ...)
      • এবং এর ব্যবহার - আমি আচরণটির প্রতিলিপি করব os.path.isfile(নোট করুন যে এটি কেবল প্রদর্শনের উদ্দেশ্যে, উত্পাদনের জন্য এই জাতীয় কোড লেখার চেষ্টা করবেন না ):

        import os
        import stat
        
        
        def isfile_seaman(path):  # Dummy func
            result = False
            with Swallow():
                result = stat.S_ISREG(os.stat(path).st_mode)
            return result
    • [পাইথন 3] ব্যবহার করুন : প্রসঙ্গ লিবিব। দমন ( * ব্যতিক্রম ) - যা নির্দিষ্টভাবে ব্যতিক্রমগুলি নির্বাচন করার জন্য ডিজাইন করা হয়েছিল


    কিন্তু, তারা উপর চাদরে হবে বলে মনে হচ্ছে ব্যবহার করে দেখুন / ব্যতীত / অন্য / পরিশেষে ব্লক, যেমন [পাইথন 3]: সঙ্গে বিবৃতি পদ বলে:

    এর ফলে সাধারণ ব্যবহার করে দেখুন ... ব্যতীত ... পরিশেষে ব্যবহার নিদর্শন সুবিধাজনক পুনঃব্যবহারের জন্য encapsulated করা হবে।

  3. ফাইল সিস্টেম ট্র্যাভারসাল ফাংশন (এবং আইটেমগুলির সাথে ম্যাচের ফলাফলগুলি অনুসন্ধান করুন)


    ফোল্ডার উপর এই বারবার, তারা আমাদের সমস্যার জন্য অদক্ষ হয় (বেশিরভাগ ক্ষেত্রে) যেহেতু (সেখানে ব্যতিক্রম, অ ওয়াইল্ডকার্ডযুক্ত মত উল্লিখিত glob তাই আমি তাদের পীড়াপীড়ি যাচ্ছি না, - যেমন @ShadowRanger নির্দিষ্ট Bing)। কিছু ক্ষেত্রে ফাইল নাম প্রসেসিংয়ের প্রয়োজন হতে পারে তা উল্লেখ করার দরকার নেই।

  4. [পাইথন 3]: ওএস। অ্যাক্সেস ( পাথ, মোড, *, দির_এফডি = কোনওটি নয়, কার্যকর_আইডিএস = মিথ্যা, অনুসরণ_সাইক্লিংকস = সত্য ) যার আচরণটি নিকটে os.path.exists(আসলে এটি বৃহত্তর, মূলত 2 তম যুক্তির কারণে)

    • ব্যবহারকারীর অনুমতিগুলি দস্তাবেজের বিবরণ হিসাবে ফাইলটিকে "দৃশ্যমানতা" সীমাবদ্ধ করতে পারে:

      ... পরীক্ষা আবাহন ব্যবহারকারীকে নির্দিষ্ট অ্যাক্সেস আছে যদি পথমোড হওয়া উচিত F_OK পথের অস্তিত্ব পরীক্ষা করার জন্য ...

    os.access("/tmp", os.F_OK)

    যেহেতু আমি কাজ করতে সি , আমি ভাল হিসাবে এই পদ্ধতি ব্যবহার কারণ ফণা অধীন, এটা আহ্বান নেটিভ এপিআই গুলি (আবার, মাধ্যমে "$ {PYTHON_SRC_DIR} /Modules/posixmodule.c" ), কিন্তু এটি সম্ভব জন্য একটি গেট খুলে ব্যবহারকারী ত্রুটিগুলি , এবং এটি অন্যান্য রূপগুলির মতো পাইথন আইসির মতো নয় । সুতরাং, @ অ্যারোনহল যথাযথভাবে উল্লেখ করেছেন, আপনি কী করছেন তা যদি না জানেন তবে এটি ব্যবহার করবেন না:

    দ্রষ্টব্য : নেটিভ API গুলি কল করা [পাইথন 3] এর মাধ্যমেও সম্ভব : সিটিপস - পাইথনের জন্য একটি বিদেশী ফাংশন লাইব্রেরি , তবে বেশিরভাগ ক্ষেত্রে এটি আরও জটিল।

    ( উইন নির্দিষ্ট): যেহেতু vcruntime * ( msvcr * ) .dll রপ্তানির একটি [MS.Docs]: _access, _waccess ফাংশন পরিবার হিসাবে ভাল, এখানে একটি উদাহরণ আছে:

    Python 3.5.3 (v3.5.3:1880cb95a742, Jan 16 2017, 16:02:32) [MSC v.1900 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import os, ctypes
    >>> ctypes.CDLL("msvcrt")._waccess(u"C:\\Windows\\System32\\cmd.exe", os.F_OK)
    0
    >>> ctypes.CDLL("msvcrt")._waccess(u"C:\\Windows\\System32\\cmd.exe.notexist", os.F_OK)
    -1

    দ্রষ্টব্য :

    • যদিও এটি একটি ভাল অনুশীলন নয়, আমি os.F_OKকলটিতে ব্যবহার করছি তবে এটি কেবল স্পষ্টতার জন্য (এর মান 0 )
    • আমি ব্যবহার করছি _waccess যাতে একই কোড কাজ Python3 এবং Python2 (সত্ত্বেও ইউনিকোড সম্পর্কিত তাদের মধ্যে পার্থক্য)
    • যদিও এটি একটি খুব নির্দিষ্ট ক্ষেত্রকে লক্ষ্য করে, এটি পূর্বের কোনও উত্তরে উল্লেখ করা হয়নি


    পাশাপাশি Lnx ( Ubtu (16 x64) ) অংশটিও :

    Python 3.5.2 (default, Nov 17 2016, 17:05:23)
    [GCC 5.4.0 20160609] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import os, ctypes
    >>> ctypes.CDLL("/lib/x86_64-linux-gnu/libc.so.6").access(b"/tmp", os.F_OK)
    0
    >>> ctypes.CDLL("/lib/x86_64-linux-gnu/libc.so.6").access(b"/tmp.notexist", os.F_OK)
    -1

    দ্রষ্টব্য :

    • পরিবর্তে hardcoding libc এর পথ ( "/lib/x86_64-linux-gnu/libc.so.6" ) যা হতে পারে (এবং সম্ভবত, হবে) সিস্টেম, জুড়ে পরিবর্তিত হতে কোনটি (অথবা খালি স্ট্রিং) প্রেরণ করা সম্ভব CDLL কন্সট্রাকটর ( ctypes.CDLL(None).access(b"/tmp", os.F_OK))। [Man7] অনুসারে : DLOPEN (3) :

      যদি ফাইলের নাম নুল হয়, তবে প্রত্যাবর্তিত হ্যান্ডেলটি মূল প্রোগ্রামটির জন্য। Dlsym () এ দেওয়া হলে , এই হ্যান্ডেলটি মূল প্রোগ্রামে একটি প্রতীকের সন্ধানের কারণ হয়ে থাকে, তারপরে প্রোগ্রাম স্টার্টআপে লোড হওয়া সমস্ত ভাগ করে নেওয়া অবজেক্ট এবং তারপরে RTLD_GLOBAL পতাকা সহ dlopen () দ্বারা লোড করা সমস্ত ভাগ করা অবজেক্ট থাকে

      • মূল (বর্তমান) প্রোগ্রাম ( পাইথন ) লিবিসি-র সাথে লিঙ্কযুক্ত , সুতরাং এর চিহ্নগুলি ( অ্যাক্সেস সহ ) লোড করা হবে
      • এটি যত্ন সহকারে পরিচালনা করতে হবে, যেহেতু প্রধান , পাই_মাইন এবং (সমস্ত) অন্যদের মতো ফাংশন উপলব্ধ; তাদের কল করার ফলে বিপর্যয়কর প্রভাব পড়তে পারে (বর্তমান প্রোগ্রামে)
      • এটাও প্রযোজ্য নয় উইন (কিন্তু যে এই ধরনের একটি বড় চুক্তি, যেহেতু নয় msvcrt.dll অবস্থিত "% SystemRoot% \ system32" যা হয় % পাথ% ডিফল্ট দ্বারা)। আমি জিনিসগুলি আরও এগিয়ে নিতে এবং উইনের (এবং একটি প্যাচ জমা দেওয়ার জন্য) এই আচরণটির প্রতিলিপি করতে চেয়েছিলাম , তবে এটি হিসাবে দেখা যাচ্ছে, [এমএস ডকস]: গেটপ্রোকএড্রেস ফাংশনটি কেবল রফতানি প্রতীকগুলিকে "দেখায়" , তাই যতক্ষণ না কেউ মুখ্য নির্বাহী ক্ষেত্রে ফাংশনগুলি ঘোষণা না করে যেমন __declspec(dllexport)(কেন পৃথিবীতে নিয়মিত ব্যক্তি তা করতে হবে?), প্রধান প্রোগ্রাম লোড করার যোগ্য কিন্তু প্রায় কাছাকাছি অব্যবহারযোগ্য হয়
  5. ফাইল সিস্টেমের ক্ষমতা সহ কিছু তৃতীয় পক্ষের মডিউল ইনস্টল করুন

    সম্ভবত, উপরের কোনও একটির উপর নির্ভর করবে (সম্ভবত সামান্য কাস্টমাইজেশন সহ)।
    একটি উদাহরণ হ'ল (আবার উইন স্পেসিফিক) [গিটহাব]: মুহমন্ড / পাইউইন 32 - উইন্ডোজ (পাইওয়াইন 32) এক্সটেনশনের জন্য পাইথন , যা উইনাপির উপর পাইথন র‍্যাপার ।

    তবে, যেহেতু এটি আরও কাজের মতো, তাই আমি এখানেই থামছি।

  6. আরেকটি (খোঁড়া) কার্যসংক্রান্ত ( gainarie ) (যেমন আমি এটা কল করতে চান,) হয় sysadmin পদ্ধতির: ব্যবহার পাইথন একটি লেফাফা যেমন শেল কমান্ড চালানো

    • জয় :

      (py35x64_test) e:\Work\Dev\StackOverflow\q000082831>"e:\Work\Dev\VEnvs\py35x64_test\Scripts\python.exe" -c "import os; print(os.system('dir /b \"C:\\Windows\\System32\\cmd.exe\" > nul 2>&1'))"
      0
      
      (py35x64_test) e:\Work\Dev\StackOverflow\q000082831>"e:\Work\Dev\VEnvs\py35x64_test\Scripts\python.exe" -c "import os; print(os.system('dir /b \"C:\\Windows\\System32\\cmd.exe.notexist\" > nul 2>&1'))"
      1
    • তুষার ( Lnx ( Ubtu )):

      [cfati@cfati-ubtu16x64-0:~]> python3 -c "import os; print(os.system('ls \"/tmp\" > /dev/null 2>&1'))"
      0
      [cfati@cfati-ubtu16x64-0:~]> python3 -c "import os; print(os.system('ls \"/tmp.notexist\" > /dev/null 2>&1'))"
      512

নীচের লাইন :

  • চেষ্টা করুন / বাদে / অন্যথায় / অবরুদ্ধ ব্লকগুলি ব্যবহার করবেন না কারণ তারা আপনাকে একাধিক ন্যক্কারজনক সমস্যায় পড়তে বাধা দিতে পারে। একটি পাল্টা উদাহরণ যা আমি ভাবতে পারি, তা হ'ল পারফরম্যান্স: এই জাতীয় ব্লকগুলি ব্যয়বহুল, সুতরাং এটি কোডে রাখার চেষ্টা করবেন না যে এটি প্রতি সেকেন্ডে কয়েক হাজার বার চালানোর কথা (তবে যেহেতু (বেশিরভাগ ক্ষেত্রে) এতে ডিস্ক অ্যাক্সেস জড়িত, এটা হবে না)।

চূড়ান্ত নোট (গুলি) :

  • আমি এটি আপ টু ডেট রাখার চেষ্টা করব, যে কোনও পরামর্শই স্বাগত, আমি উত্তরের মধ্যে যে দরকারী কিছু অন্তর্ভুক্ত করব

3
আপনি এই বিবৃতিতে বিস্তারিত বলতে পারেন? "যদিও এটি একটি ভাল অনুশীলন নয়, আমি কলটিতে os.F_OK ব্যবহার করছি, তবে এটি কেবল স্পষ্টতার জন্য (এর মান 0)"
sk8asd123

6
@ sk8asd123: একটি মন্তব্যে এটিকে ধুয়ে ফেলার মতো ধরণের: সাধারণত, স্থিরভাবে যে ক্রিয়াকলাপগুলি তারা একত্রিত হয় সেগুলি ব্যবহার করা ভাল। একই ধ্রুবককে সংজ্ঞায়িত করে একাধিক মডিউল নিয়ে কাজ করার সময় এটি প্রযোজ্য, কারণ কিছু আপ টু ডেট নাও হতে পারে এবং ফাংশন এবং ধ্রুবকগুলি সিঙ্কে থাকার জন্য এটি সর্বোত্তম। সিটিপিসের সাথে কাজ করার সময় (সরাসরি ফাংশনগুলিকে কল করা) আমার ধ্রুবকটি ( এমএসডিএন থেকে ) সংজ্ঞায়িত করা উচিত ছিল , বা একটি ধ্রুবকটি মোটেই ব্যবহার করা উচিত নয়। এটি কেবলমাত্র একটি গাইডলাইন যা আমি ব্যবহার করি, 99.9% এ এটি সম্ভবত কোনও কার্যকারিতা দেয় না (কার্যকরীভাবে)।
ক্রিশ্চাফতি

3
@ ক্রিস্টিফাটি: ৩.6 হিসাবে, glob.iglob(এবং glob.globপাশাপাশি) ভিত্তিকos.scandir , তাই এটি এখন অলস; 10 এম ফাইলের ডিরেক্টরিতে প্রথম হিট পেতে, আপনি কেবল প্রথম হিট না হওয়া পর্যন্ত কেবল স্ক্যান করেন। এমনকি প্রাক-6.6, আপনি যদি globকোনও ওয়াইল্ডকার্ডগুলি w / o পদ্ধতি ব্যবহার করেন তবে ফাংশনটি স্মার্ট: এটি জানে যে আপনি কেবল একটি আঘাত করতে পারেন, সুতরাং এটি গ্লোব্বিংকে কেবল os.path.isdirবাos.path.lexists (পথটি শেষ হয় কিনা তার উপর নির্ভর করে /) সহজ করে তোলে
শ্যাডোর্যাঞ্জার

3
আমার মন্তব্যের দ্বিতীয় অংশটি (অ-ওয়াইল্ড কার্ডেড গ্লোব্বিং আসলে ফোল্ডারটি পুনরাবৃত্তি করে না, এবং কখনই নেই) এর অর্থ এটি সমস্যার পুরোপুরি দক্ষ সমাধান (সরাসরি কল করার চেয়ে ধীর os.path.isdirবা os.path.lexistএটি পাইথন স্তরের ফাংশন কল এবং স্ট্রিংয়ের একগুচ্ছ) কার্যকর পাথ স্থির করার আগে ক্রিয়াকলাপগুলি কার্যকর, তবে কোনও অতিরিক্ত সিস্টেম কল বা আই / ও কাজ নয়, যা প্রস্থের ধীরতার আদেশ।
শ্যাডোর্যাঞ্জার

154

কোনও ফাইল উপস্থিত রয়েছে কিনা তা যাচাই করার এটি সহজতম উপায়। আপনি যাচাই করে যখন ফাইলটি বিদ্যমান ছিল কেবল তার কারণ আপনি যখন এটি খোলার দরকার হবে তখন এটি উপস্থিত থাকবে তার গ্যারান্টি দেয় না ।

import os
fname = "foo.txt"
if os.path.isfile(fname):
    print("file does exist at this time")
else:
    print("no such file exists at this time")

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

@ আইসাকসুপেইন সেরা ফাইলটি (ফাইল) অপারেশনটির উইন্ডোটিকে যতটা সম্ভব ছোট করা এবং তারপরে একটি যথাযথ ব্যতিক্রম হ্যান্ডলিং করা যায়
un33k

145

পাইথন 3.4+ এর একটি অবজেক্ট-ওরিয়েন্টেড পাথ মডিউল রয়েছে: পাথলিব । এই নতুন মডিউলটি ব্যবহার করে, আপনি পরীক্ষা করতে পারেন যে কোনও ফাইলের উপস্থিতি রয়েছে কি না:

import pathlib
p = pathlib.Path('path/to/file')
if p.is_file():  # or p.is_dir() to see if it is a directory
    # do stuff

try/exceptফাইলগুলি খোলার সময় আপনি এখনও (এবং সাধারণত হওয়া উচিত) একটি ব্লক ব্যবহার করতে পারেন :

try:
    with p.open() as f:
        # do awesome stuff
except OSError:
    print('Well darn.')

প্যাথলিব মডিউলে এতে প্রচুর শীতল জিনিস রয়েছে: সুবিধাজনক গ্লোব্বিং, ফাইলের মালিকের পরীক্ষা করা, সহজ পাথ যোগ দেওয়া ইত্যাদি checking এটি পরীক্ষা করে দেখার মতো। আপনি যদি কোনও পুরানো পাইথন (সংস্করণ ২. later বা তারপরে) থেকে থাকেন তবে আপনি এখনও পাইপ সহ পাথলিব ইনস্টল করতে পারেন:

# installs pathlib2 on older Python versions
# the original third-party module, pathlib, is no longer maintained.
pip install pathlib2

তারপরে এটিকে আমদানি করুন:

# Older Python versions
import pathlib2 as pathlib

124

চেষ্টা বিবৃতি পছন্দ করুন। এটিকে আরও ভাল স্টাইল হিসাবে বিবেচনা করা হয় এবং জাতিদের অবস্থা এড়ানো যায়।

আমার কথাটি এর জন্য নিবেন না। এই তত্ত্বটির জন্য প্রচুর সমর্থন রয়েছে। এখানে একটি দম্পতি:


3
আপনার বক্তব্য সমর্থন করার জন্য দয়া করে আরও ভাল উত্স যুক্ত করুন।
ব্লুট্রিন

11
উদ্ধৃত রেস শর্তাদি (অ্যাপল ডেভ সমর্থন) লিঙ্কটি আপনার উত্তরটিকে সমর্থন করে না। এটি কেবলমাত্র অস্থায়ী ফাইলগুলি ব্যবহার করে যা দুর্বল নকশাকৃত অপারেটিং সিস্টেমে সংবেদনশীল তথ্য রয়েছে যা সীমাবদ্ধ অনুমতিগুলির মাধ্যমে অস্থায়ী ফাইল / ডিরেক্টরিগুলি সঠিকভাবে স্যান্ডবক্স করে না। ব্যবহার try...exceptনা সাহায্যের সমাধানে যে সমস্যা যাহাই হউক না কেন।
জাস্টাইন

এই পদ্ধতির সমস্যাটি হ'ল যদি আপনার বিদ্যমান ফাইলের উপর নির্ভর না করে কোডের একটি গুরুত্বপূর্ণ অংশ থাকে তবে এটিকে দলে রেখে except:দিলে আপনার কোডের এই অংশে একটি ব্যতিক্রম একটি বিভ্রান্তিকর বার্তা উত্থাপন করবে (দ্বিতীয় ত্রুটির সময় উত্থাপিত হয়েছে) প্রথমটির প্রক্রিয়াজাতকরণ))
ক্যামিয়ন 24'19

119

ট্রাই স্টেটমেন্ট ব্যবহার না করে পাইথন ব্যবহার করে কোনও ফাইল উপস্থিত রয়েছে কিনা তা আমি কীভাবে চেক করব?

পাইথন ৩.৪ থেকে এখন উপলভ্য, Pathফাইলের নাম সহ কোনও is_fileবিষয়বস্তু আমদানি করুন এবং তা ইনস্ট্যান্ট করুন এবং পদ্ধতিটি পরীক্ষা করুন (নোট করুন যে এটি নিয়মিত ফাইলগুলিতেও নির্দেশ করে এমন সিমলিংকের ক্ষেত্রে সত্য):

>>> from pathlib import Path
>>> Path('/').is_file()
False
>>> Path('/initrd.img').is_file()
True
>>> Path('/doesnotexist').is_file()
False

আপনি যদি পাইথন 2 এ থাকেন তবে আপনি পাইপি থেকে প্যাথলিব মডিউলটি ব্যাকপোর্ট করতে পারেন pathlib2, বা অন্যথায় মডিউলটি থেকে পরীক্ষা isfileকরতে পারেন os.path:

>>> import os
>>> os.path.isfile('/')
False
>>> os.path.isfile('/initrd.img')
True
>>> os.path.isfile('/doesnotexist')
False

এখন উপরেরটি সম্ভবত এখানে সর্বোত্তম ব্যবহারিক প্রত্যক্ষ উত্তর, তবে একটি জাতি শর্তের সম্ভাবনা রয়েছে (আপনি কী অর্জন করতে চাইছেন তার উপর নির্ভর করে) এবং সত্য যে অন্তর্নিহিত বাস্তবায়ন একটি ব্যবহার করে tryতবে পাইথন tryতার বাস্তবায়নে সর্বত্র ব্যবহার করে ।

পাইথন যেহেতু tryসর্বত্র ব্যবহার করে তাই এটি ব্যবহার করে এমন বাস্তবায়ন এড়ানোর কোনও কারণ নেই।

তবে এই উত্তরটির বাকি অংশগুলি এই সতর্কতামূলক বিষয়গুলি বিবেচনা করার চেষ্টা করে।

দীর্ঘ, অনেক বেশি পেডেন্টিক উত্তর

পাইথন ৩.৪ থেকে পাওয়া যায়, এতে নতুন Pathবস্তুটি ব্যবহার করুন pathlib। দ্রষ্টব্য যে .existsএকেবারেই সঠিক নয়, কারণ ডিরেক্টরিগুলি ফাইলগুলি নয় (ইউনিক্স অর্থে যে সবকিছুই একটি ফাইল।

>>> from pathlib import Path
>>> root = Path('/')
>>> root.exists()
True

সুতরাং আমাদের ব্যবহার করা প্রয়োজন is_file:

>>> root.is_file()
False

এখানে সহায়তা দেওয়া আছে is_file:

is_file(self)
    Whether this path is a regular file (also True for symlinks pointing
    to regular files).

সুতরাং আসুন যে ফাইলটি আমরা জানি একটি ফাইল এটি পাওয়া যাক:

>>> import tempfile
>>> file = tempfile.NamedTemporaryFile()
>>> filepathobj = Path(file.name)
>>> filepathobj.is_file()
True
>>> filepathobj.exists()
True

ডিফল্টরূপে, NamedTemporaryFileফাইলটি বন্ধ হয়ে গেলে মুছে ফেলা হয় (এবং এর সাথে আর কোনও রেফারেন্স উপস্থিত না থাকলে স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে)।

>>> del file
>>> filepathobj.exists()
False
>>> filepathobj.is_file()
False

আপনি যদি বাস্তবায়নটি খনন করেন তবে আপনি দেখতে পাবেন যে এটি is_fileব্যবহার করে try:

def is_file(self):
    """
    Whether this path is a regular file (also True for symlinks pointing
    to regular files).
    """
    try:
        return S_ISREG(self.stat().st_mode)
    except OSError as e:
        if e.errno not in (ENOENT, ENOTDIR):
            raise
        # Path doesn't exist or is a broken symlink
        # (see https://bitbucket.org/pitrou/pathlib/issue/12/)
        return False

রেসের শর্তাদি: আমরা চেষ্টাটি কেন পছন্দ করি

আমরা পছন্দ করি tryকারণ এটি জাতির শর্ত এড়িয়ে চলে। এর সাহায্যে tryআপনি কেবল নিজের ফাইলটি পড়ার চেষ্টা করেছেন, এটি উপস্থিত থাকার প্রত্যাশা করে এবং যদি তা না হয় তবে আপনি ব্যতিক্রমটি ধরেন এবং যে কোনও ফলব্যাক আচরণটি বোঝায় তা সম্পাদন করে।

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

রেস শর্তগুলি ডিবাগ করা খুব কঠিন কারণ একটি খুব ছোট উইন্ডো রয়েছে যাতে তারা আপনার প্রোগ্রামকে ব্যর্থ করতে পারে।

তবে এটি যদি আপনার প্রেরণা হয় তবে আপনি প্রসঙ্গ পরিচালককে ব্যবহার করে একটি বিবৃতিটির মান পেতে পারেনtrysuppress

একটি চেষ্টা বিবৃতি ছাড়া জাতি শর্ত এড়ানো: suppress

পাইথন ৩.৪ আমাদের suppressপ্রসঙ্গ ম্যানেজার দেয় (পূর্বে ignoreপ্রসঙ্গ পরিচালক), যা কম লাইনে শব্দার্থগতভাবে ঠিক একই কাজ করে, যখন (অন্তত পৃষ্ঠপোষকভাবে) মূল বিবরণটি এড়াতে জিজ্ঞাসা করে try:

from contextlib import suppress
from pathlib import Path

ব্যবহার:

>>> with suppress(OSError), Path('doesnotexist').open() as f:
...     for line in f:
...         print(line)
... 
>>>
>>> with suppress(OSError):
...     Path('doesnotexist').unlink()
... 
>>> 

পূর্ববর্তী পাইথনসের জন্য, আপনি নিজের রোল করতে পারেন suppress, তবে একটি ছাড়া tryতার চেয়ে বেশি ভার্বোজ হবে। আমি বিশ্বাস করি যে এটি আসলে একমাত্র উত্তর যা tryপাইথনের কোনও স্তরে পাইথন ৩.৪ এর পূর্বে প্রয়োগ করা যেতে পারে না কারণ এটি পরিবর্তে একটি প্রসঙ্গ পরিচালক ব্যবহার করে:

class suppress(object):
    def __init__(self, *exceptions):
        self.exceptions = exceptions
    def __enter__(self):
        return self
    def __exit__(self, exc_type, exc_value, traceback):
        if exc_type is not None:
            return issubclass(exc_type, self.exceptions)

চেষ্টা করে খুব সহজ:

from contextlib import contextmanager

@contextmanager
def suppress(*exceptions):
    try:
        yield
    except exceptions:
        pass

"অপছন্দ ছাড়াই" জিজ্ঞাসা না করে এমন অন্যান্য বিকল্প:

isfile

import os
os.path.isfile(path)

ডক্স থেকে :

os.path.isfile(path)

পাথ যদি কোনও বিদ্যমান নিয়মিত ফাইল হয় তবে সত্যটি ফিরে যান। এই সিম্বলিক লিংক অনুসরণ করে, তাই উভয় islink()এবং isfile()একই পথ জন্য সত্য হতে পারে না।

তবে আপনি যদি এই ফাংশনের উত্সটি পরীক্ষা করেন তবে আপনি দেখতে পাবেন এটি আসলে একটি ট্রায় স্টেটমেন্ট ব্যবহার করে:

# This follows symbolic links, so both islink() and isdir() can be true
# for the same path on systems that support symlinks
def isfile(path):
    """Test whether a path is a regular file"""
    try:
        st = os.stat(path)
    except os.error:
        return False
    return stat.S_ISREG(st.st_mode)
>>> OSError is os.error
True

এটি যা করছে তা প্রদত্ত পাথটি ব্যবহার করে এটি এটির পরিসংখ্যান পেতে পারে কিনা তা ধরছে OSErrorএবং ধরা পড়ে এবং তারপরে এটি ব্যতিক্রম না বাড়িয়ে যদি কোনও ফাইল হয় কিনা তা পরীক্ষা করে।

যদি আপনি ফাইলটি দিয়ে কিছু করার ইচ্ছা করেন তবে আমি রেসের শর্ত এড়ানোর জন্য চেষ্টা করে সরাসরি চেষ্টা করার পরামর্শ দেব:

try:
    with open(path) as f:
        f.read()
except OSError:
    pass

os.access

ইউনিক্স এবং উইন্ডোজের জন্য উপলভ্য os.access, তবে ব্যবহার করার জন্য আপনাকে অবশ্যই পতাকা পাস করতে হবে এবং এটি ফাইল এবং ডিরেক্টরিগুলির মধ্যে পার্থক্য করে না। প্রকৃত আমন্ত্রণকারী ব্যবহারকারীর একটি উন্নত সুবিধা পরিবেশে অ্যাক্সেস আছে কিনা তা পরীক্ষার জন্য এটি আরও বেশি ব্যবহৃত হয়:

import os
os.access(path, os.F_OK)

এটি একই বর্ণের শর্তের সমস্যায়ও ভুগছে isfileডক্স থেকে :

দ্রষ্টব্য: কোনও ব্যবহারকারীর উদাহরণস্বরূপ ওপেন () ব্যবহার করে কোনও ফাইল খোলার জন্য অনুমোদিত কিনা তা পরীক্ষা করতে অ্যাক্সেস () ব্যবহার করে একটি সুরক্ষা গর্ত তৈরি হয়, কারণ ব্যবহারকারীটি ফাইলটি পরীক্ষা করে দেখার জন্য এবং এটি খোলার মধ্যে স্বল্প সময়ের ব্যবধানটি ব্যবহার করতে পারে। ইএএফপি কৌশলগুলি ব্যবহার করা ভাল। উদাহরণ স্বরূপ:

if os.access("myfile", os.R_OK):
    with open("myfile") as fp:
        return fp.read()
return "some default data"

আরও ভাল লিখেছেন:

try:
    fp = open("myfile")
except IOError as e:
    if e.errno == errno.EACCES:
        return "some default data"
    # Not a permission error.
    raise
else:
    with fp:
        return fp.read()

ব্যবহার এড়িয়ে চলুন os.access। এটি নিম্ন স্তরের ফাংশন যা ব্যবহারকারীর ত্রুটির জন্য উচ্চতর স্তরের বস্তু এবং উপরে আলোচিত ফাংশনগুলির চেয়ে বেশি সুযোগ রয়েছে।

অন্য উত্তরের সমালোচনা:

আর একটি উত্তর এ সম্পর্কে বলে os.access:

ব্যক্তিগতভাবে, আমি এটিকে পছন্দ করি কারণ হুডের নীচে এটি নেটিভ এপিআইগুলিকে কল করে ("$ {পাইথোন এসআরসি_ডিআইআর / মডুলস / পোসিক্সডমডিউল" মাধ্যমে), তবে এটি সম্ভাব্য ব্যবহারকারীর ত্রুটির জন্য একটি গেটও খোলায় এবং এটি অন্য রূপগুলির মতো পাইথোনিকের মতো নয় :

এই উত্তরটি বলে যে এটি কোনও পাইথোনিক, ত্রুটি-প্রবণ পদ্ধতি পছন্দ করে, কোনও যুক্তি ছাড়াই। এটি ব্যবহারকারীদের বুঝতে না পেরে নিম্ন-স্তরের API ব্যবহার করতে উত্সাহিত করেছে বলে মনে হচ্ছে।

এটি একটি প্রসঙ্গ পরিচালকও তৈরি করে যা নিঃশর্তভাবে ফিরে আসার Trueমাধ্যমে সমস্ত ব্যতিক্রম (সহ KeyboardInterruptএবং SystemExit!) নিঃশব্দে পাস করার অনুমতি দেয় যা বাগগুলি আড়াল করার একটি ভাল উপায়।

এটি ব্যবহারকারীদের দুর্বল অভ্যাসগুলি গ্রহণ করতে উত্সাহিত করে বলে মনে হচ্ছে।


87
import os
#Your path here e.g. "C:\Program Files\text.txt"
#For access purposes: "C:\\Program Files\\text.txt"
if os.path.exists("C:\..."):   
    print "File found!"
else:
    print "File not found!"

আমদানি osআপনার অপারেটিং সিস্টেমের সাহায্যে নেভিগেট এবং স্ট্যান্ডার্ড ক্রিয়াকলাপ সম্পাদনকে সহজ করে তোলে।

রেফারেন্সের জন্য আরও দেখুন যে পাইথন ব্যবহার করে কোনও ফাইল বিদ্যমান আছে কিনা তা পরীক্ষা করে দেখুন?

আপনার যদি উচ্চ-স্তরের অপারেশনগুলির প্রয়োজন হয় তবে ব্যবহার করুন shutil


9
এই উত্তরটি ভুল। os.path.existsডিরেক্টরি নয় এমন ফাইলগুলির জন্য সত্য প্রত্যাবর্তন করে। এটি মিথ্যা ইতিবাচক দেয়। প্রস্তাবিত অন্যান্য উত্তরগুলি দেখুন os.path.isfile
ক্রিস জনসন

84

ফাইল ও সহ ফোল্ডারের জন্য টেস্টিং os.path.isfile(), os.path.isdir()এবংos.path.exists()

"পথ" একটি বৈধ পথ হিসাবে ধরে নেওয়া, এই টেবিলটি ফাইল এবং ফোল্ডারগুলির জন্য প্রতিটি ফাংশন দ্বারা কী ফিরে আসে তা দেখায়:

এখানে চিত্র বর্ণনা লিখুন

os.path.splitext()এক্সটেনশানটি পেতে কোনও ফাইল নির্দিষ্ট ধরণের ফাইল হয় কিনা তাও আপনি পরীক্ষা করতে পারেন (যদি আপনি ইতিমধ্যে এটি জানেন না)

>>> import os
>>> path = "path to a word document"
>>> os.path.isfile(path)
True
>>> os.path.splitext(path)[1] == ".docx" # test if the extension is .docx
True

72

২০১ 2016 সালে সর্বোত্তম উপায় এখনও ব্যবহার করছে os.path.isfile:

>>> os.path.isfile('/path/to/some/file.txt')

অথবা পাইথন 3 এ আপনি ব্যবহার করতে পারেন pathlib :

import pathlib
path = pathlib.Path('/path/to/some/file.txt')
if path.is_file():
    ...

3
আমি জিজ্ঞাসা করতে পারি: এই পরীক্ষার জন্য পাইথন 3-তে মডিউল 'ওএস' এর পরিবর্তে মডিউল 'প্যাথলিব' ব্যবহারের সুবিধা কী?
জোকো

3
pathlibপাথের জন্য অজগরটির ওওপি সমাধান। আপনি এটি দিয়ে আরও অনেক কিছু করতে পারেন। আপনার যদি কেবল অস্তিত্ব পরীক্ষা করতে হয় তবে সুবিধাটি এত বড় নয়।
KaiBuxe

65

দেখে মনে হচ্ছে বলে মনে হচ্ছে না / চেষ্টা বাদে এবং এর মধ্যে অর্থপূর্ণ কার্যকরী পার্থক্য রয়েছে isfile() , সুতরাং কোনটি বোঝায় তা আপনার ব্যবহার করা উচিত।

আপনি যদি কোনও ফাইল পড়তে চান তবে এটি উপস্থিত থাকলে, করুন

try:
    f = open(filepath)
except IOError:
    print 'Oh dear.'

তবে আপনি যদি কেবল একটি ফাইল উপস্থিত থাকলে এটির নাম পরিবর্তন করতে চান এবং তাই এটি খোলার দরকার নেই, করুন

if os.path.isfile(filepath):
    os.rename(filepath, filepath + '.old')

আপনি যদি কোনও ফাইলে লিখতে চান তবে এটি উপস্থিত না থাকলে করুন do

# python 2
if not os.path.isfile(filepath):
    f = open(filepath, 'w')

# python 3, x opens for exclusive creation, failing if the file already exists
try:
    f = open(filepath, 'wx')
except IOError:
    print 'file already exists'

আপনার যদি ফাইল লক দরকার হয় তবে এটি আলাদা বিষয় different


3
এই উত্তরটি ভুল। os.path.existsডিরেক্টরি নয় এমন ফাইলগুলির জন্য সত্য প্রত্যাবর্তন করে। এটি মিথ্যা ইতিবাচক দেয়। প্রস্তাবিত অন্যান্য উত্তরগুলি দেখুন os.path.isfile
ক্রিস জনসন

6
আপনার তৃতীয় উদাহরণে, আমি filepathসঠিক সময়ের সাথে নামযুক্ত একটি লিঙ্ক তৈরি করি এবং বিএএম , আপনি টার্গেট ফাইলটি ওভাররাইট করে। সমস্যাটি এড়াতে আপনার open(filepath, 'wx')একটি try...exceptব্লকে করা উচিত ।
স্পেকট্রা

1
আপনার দ্বিতীয় উদাহরণে, কমপক্ষে উইন্ডোজে, আপনি ইতিমধ্যে উপস্থিত OSErrorথাকলে একটি পাবেন filepath + '.old': "উইন্ডোজে, ডিএসটি ইতিমধ্যে উপস্থিত থাকলে, ওএসররার যদি একটি ফাইলও হয় তবে উত্থাপিত হবে; ডিএসটি করার সময় কোনও পারমাণবিক নাম প্রয়োগ করার উপায় নেই may একটি বিদ্যমান ফাইলের নাম দিন "
টম মাইলডেল্টেন

@ টমমিডডেলটিন: পাইথন ৩.৩os.replace অনুসারে গন্তব্য ফাইলটি স্থিরভাবে নীরব প্রতিস্থাপন সম্পাদন করে (এটি os.renameলিনাক্স আচরণের সমান ) (গন্তব্যের নামটি উপস্থিত থাকলে এবং ডিরেক্টরিতে এটি কেবল ত্রুটি হয়)। সুতরাং আপনি ২.x এ আটকে গেছেন তবে পাই 3 ব্যবহারকারীরা বেশ কয়েক বছর ধরে ভাল বিকল্প পেয়েছেন।
শ্যাডোর্যাঞ্জার

উপর renameউদাহরণ: এটা এখনও সঙ্গে সম্পন্ন করতে হবে try/ exceptos.rename(বা os.replaceআধুনিক পাইথনের উপরে) পারমাণবিক; এটি পরীক্ষা করে পুনরায় নামকরণ করা একটি অপ্রয়োজনীয় রেস এবং অতিরিক্ত সিস্টেম কলগুলি উপস্থাপন করে। কেবলমাত্র করুনtry: os.replace(filepath, filepath + '.old') except OSError: pass
শেডোএ্যাঞ্জার

59

আপনি এটি চেষ্টা করতে পারেন (নিরাপদ):

try:
    # http://effbot.org/zone/python-with-statement.htm
    # 'with' is safer to open a file
    with open('whatever.txt') as fh:
        # Do something with 'fh'
except IOError as e:
    print("({})".format(e))

আউটপুটটি হবে:

([এর্নো ২] এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই: 'যাইহোক। টেক্সট')

তারপরে, ফলাফলের উপর নির্ভর করে আপনার প্রোগ্রামটি সেখান থেকে চলমান রাখতে পারে বা আপনি চাইলে এটিকে থামানোর জন্য কোড করতে পারেন।


18
আসল প্রশ্নটি এমন সমাধানের জন্য জিজ্ঞাসা করেছিল যা ব্যবহার না করেtry
rrs

5
এই উত্তরটি ওপির পয়েন্টটি মিস করে। চেক করা কোনও ফাইল বিদ্যমান যা আপনি এটি খুলতে পারেন কিনা তা যাচাই করার মতো নয়। এমন একটি মামলা থাকবে যেখানে কোনও ফাইল উপস্থিত রয়েছে তবে বিভিন্ন কারণে আপনি এটি খুলতে পারবেন না।
ক্রিস জনসন

51

যদিও আমি সর্বদা ব্যবহার tryএবং exceptবিবৃতি দেওয়ার পরামর্শ দিই , আপনার জন্য এখানে কয়েকটি সম্ভাবনা রয়েছে (আমার ব্যক্তিগত পছন্দ ব্যবহার করছে os.access):

  1. ফাইলটি খোলার চেষ্টা করুন:

    ফাইলটি খোলার ফলে সর্বদা ফাইলের অস্তিত্ব যাচাই করা হবে। আপনি ঠিক তেমন একটি ফাংশন তৈরি করতে পারেন:

    def File_Existence(filepath):
        f = open(filepath)
        return True

    যদি এটি মিথ্যা হয় তবে এটি পাইথনের পরবর্তী সংস্করণগুলিতে অযথিত IOError বা OSError দিয়ে মৃত্যুদন্ড কার্যকর করবে। ব্যতিক্রমটি ধরতে, আপনাকে ক্লজটি বাদ দিয়ে চেষ্টা করতে হবে। অবশ্যই, আপনি সর্বদা এই জাতীয় একটি tryবিবৃতি ব্যবহার করতে পারেন ( আমাকে ভাবিয়ে তোলার জন্য এইচএস্যান্ড্টকে ধন্যবাদ ):

    def File_Existence(filepath):
        try:
            f = open(filepath)
        except IOError, OSError: # Note OSError is for later versions of Python
            return False
    
        return True
  2. ব্যবহার os.path.exists(path):

    এটি আপনার নির্দিষ্টকরণের অস্তিত্ব পরীক্ষা করবে। তবে এটি ফাইল এবং ডিরেক্টরিগুলির জন্য পরীক্ষা করে তাই আপনি কীভাবে এটি ব্যবহার করেন সে সম্পর্কে সতর্ক হন।

    import os.path
    >>> os.path.exists("this/is/a/directory")
    True
    >>> os.path.exists("this/is/a/file.txt")
    True
    >>> os.path.exists("not/a/directory")
    False
  3. ব্যবহার os.access(path, mode):

    এটি আপনার ফাইলটিতে অ্যাক্সেস আছে কিনা তা যাচাই করবে। এটি অনুমতিগুলির জন্য পরীক্ষা করবে। Os.py ডকুমেন্টেশনের উপর ভিত্তি করে টাইপ করে os.F_OKএটি পথের অস্তিত্ব পরীক্ষা করবে। তবে এটি ব্যবহার করা একটি সুরক্ষা গর্ত তৈরি করবে, কারণ অনুমতিগুলি যাচাই করা এবং ফাইলটি খোলার মধ্যে সময় ব্যবহার করে কেউ আপনার ফাইলটিতে আক্রমণ করতে পারে। পরিবর্তে ফাইলের অনুমতিগুলি পরীক্ষা করার পরিবর্তে আপনার সরাসরি ফাইলটি খোলার উচিত। ( EAFP বনাম LBYP )। আপনি যদি পরে ফাইলটি খুলতে যাচ্ছেন না এবং কেবল এর অস্তিত্ব পরীক্ষা করছেন, তবে আপনি এটি ব্যবহার করতে পারেন।

    যাইহোক, এখানে:

    >>> import os
    >>> os.access("/is/a/file.txt", os.F_OK)
    True

আমার আরও উল্লেখ করা উচিত যে দুটি উপায় রয়েছে যা আপনি কোনও ফাইলের অস্তিত্ব যাচাই করতে সক্ষম হবেন না। হয় বিষয়টি হবে permission deniedবা no such file or directory। আপনি যদি একটি ধরেন তবে IOErrorসেট করুন IOError as e(আমার প্রথম বিকল্পের মতো) এবং তারপরে টাইপ করুন print(e.args)যাতে আপনি আশাবাদী আপনার সমস্যাটি নির্ধারণ করতে পারেন। আমি আসা করি এটা সাহায্য করবে! :)


51

তারিখ: 2017-12-04

প্রতিটি সম্ভাব্য সমাধান অন্যান্য উত্তরে তালিকাভুক্ত করা হয়েছে।

একটি ফাইল বিদ্যমান কিনা তা যাচাই করার একটি স্বজ্ঞাত এবং তর্কযোগ্য উপায় নিম্নলিখিত:

import os
os.path.isfile('~/file.md')  # Returns True if exists, else False
# additionaly check a dir
os.path.isdir('~/folder')  # Returns True if the folder exists, else False
# check either a dir or a file
os.path.exists('~/file')

আপনার রেফারেন্সের জন্য আমি একটি বিস্ময়কর চিটশিট তৈরি করেছি:

#os.path methods in exhaustive cheatsheet
{'definition': ['dirname',
               'basename',
               'abspath',
               'relpath',
               'commonpath',
               'normpath',
               'realpath'],
'operation': ['split', 'splitdrive', 'splitext',
               'join', 'normcase'],
'compare': ['samefile', 'sameopenfile', 'samestat'],
'condition': ['isdir',
              'isfile',
              'exists',
              'lexists'
              'islink',
              'isabs',
              'ismount',],
 'expand': ['expanduser',
            'expandvars'],
 'stat': ['getatime', 'getctime', 'getmtime',
          'getsize']}

37

ফাইলটি খোলার জন্য হলে আপনি নিম্নলিখিত কৌশলগুলির মধ্যে একটি ব্যবহার করতে পারেন:

with open('somefile', 'xt') as f: #Using the x-flag, Python3.3 and above
    f.write('Hello\n')

if not os.path.exists('somefile'): 
    with open('somefile', 'wt') as f:
        f.write("Hello\n")
else:
    print('File already exists!')

হালনাগাদ

কেবল বিভ্রান্তি এড়াতে এবং আমি যে উত্তর পেয়েছি তার উপর ভিত্তি করে, বর্তমান উত্তরগুলি প্রদত্ত নামের একটি ফাইল বা ডিরেক্টরি খুঁজে পাবে ।


9
এই উত্তরটি ভুল। os.path.existsডিরেক্টরি নয় এমন ফাইলগুলির জন্য সত্য প্রত্যাবর্তন করে। এটি মিথ্যা ইতিবাচক দেয়। প্রস্তাবিত অন্যান্য উত্তরগুলি দেখুন os.path.isfile
ক্রিস জনসন

মিথ্যা ইতিবাচক সমস্যা পেয়েছে।
Zorglub29

docs.python.org/3/library/os.path.html#os.path.exists খ্রিস্টের উপরের বিবৃতিতে >> os.path.exists (পথ)> সত্য যদি ফিরে আসুন তবে পথটি কোনও বিদ্যমান পাথ বা একটি উন্মুক্তকে নির্দেশ করে ফাইল বর্ণনাকারী। ভাঙা প্রতীকী লিঙ্কগুলির জন্য মিথ্যা প্রত্যাবর্তন করে। কিছু প্ল্যাটফর্মে, অনুরোধ করা ফাইলটিতে os.stat () চালানোর অনুমতি না দেওয়া হলেও, পথটি শারীরিকভাবে বিদ্যমান থাকলেও এই ফাংশনটি ভুয়া ফিরতে পারে। সংস্করণ ৩.৩-তে পরিবর্তিত হয়েছে: পাথটি এখন পূর্ণসংখ্যা হতে পারে: যদি এটি একটি উন্মুক্ত ফাইল বর্ণনাকারী হয় তবে সত্য হয়, অন্যথায় মিথ্যা। সংস্করণ 3.6 এ পরিবর্তিত হয়েছে: একটি পথের মতো বস্তু গ্রহণ করে।
জয়রিজ্জা

36

অতিরিক্তভাবে os.access():

if os.access("myfile", os.R_OK):
    with open("myfile") as fp:
        return fp.read()

হচ্ছে R_OK, W_OKএবং X_OKজন্য অনুমতি (টেস্ট পতাকা ডক )।


20
if os.path.isfile(path_to_file):
    try: 
        open(path_to_file)
            pass
    except IOError as e:
        print "Unable to open file"

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

এসআরসি: http://www.pfinn.net/python-check-if-file-exists.html


3
ওপিতে কোনও ফাইলের উপস্থিতি আছে কিনা তা পরীক্ষা করে দেখতে হবে check কোনও ফাইলের অস্তিত্ব পাওয়া সম্ভব তবে এটি খুলতে না পারা আপনার পক্ষে। অতএব প্রক্সি হিসাবে একটি ফাইল খোলার সাথে ফাইলের উপস্থিতি সঠিক নয় কিনা তা যাচাই করার জন্য: মিথ্যা নেতিবাচকতা থাকতে পারে।
ক্রিস জনসন

19

আপনি অন্যান্য কাজের জন্য ইতিমধ্যে NumPy আমদানিকৃত তাহলে সেখানে মত অন্যান্য লাইব্রেরি আমদানি করতে কোন প্রয়োজন নেই pathlib, os, paths, ইত্যাদি

import numpy as np
np.DataSource().exists("path/to/your/file")

এটি তার অস্তিত্বের ভিত্তিতে সত্য বা মিথ্যা প্রত্যাবর্তন করবে।


18

আপনি ছাড়া ব্রায়ানের পরামর্শ লিখতে পারেন try:

from contextlib import suppress

with suppress(IOError), open('filename'):
    process()

suppressপাইথনের ৩.৪ অংশ। পুরানো প্রকাশে আপনি দ্রুত নিজের দমন লিখতে পারেন:

from contextlib import contextmanager

@contextmanager
def suppress(*exceptions):
    try:
        yield
    except exceptions:
        pass

17

আমি একটি প্যাকেজটির লেখক যা প্রায় 10 বছর ধরে ছিল এবং এর একটি ফাংশন রয়েছে যা এই প্রশ্নটিকে সরাসরি সম্বোধন করে। মূলত, আপনি যদি উইন্ডোজবিহীন সিস্টেমে থাকেন তবে এটি Popenঅ্যাক্সেসের জন্য ব্যবহার করে find। তবে আপনি যদি উইন্ডোজটিতে থাকেন তবে এটি findএকটি দক্ষ ফাইল সিস্টেম ওয়াকারের সাথে প্রতিরূপ তৈরি করে।

কোড নিজেই কোনও tryব্লক ব্যবহার করে না ... অপারেটিং সিস্টেমটি নির্ধারণ করা এবং এভাবে আপনাকে "ইউনিক্স" find-স্টাইল বা হ্যান্ড-বিল্টে চালিত করা ছাড়া find। সময় পরীক্ষার tryমাধ্যমে ওএস নির্ধারণে ত্বরান্বিত হয়েছে, তাই আমি সেখানে একটি ব্যবহার করেছি (তবে অন্য কোথাও নেই)।

>>> import pox
>>> pox.find('*python*', type='file', root=pox.homedir(), recurse=False)
['/Users/mmckerns/.python']

এবং ডক ...

>>> print pox.find.__doc__
find(patterns[,root,recurse,type]); Get path to a file or directory

    patterns: name or partial name string of items to search for
    root: path string of top-level directory to search
    recurse: if True, recurse down from root directory
    type: item filter; one of {None, file, dir, link, socket, block, char}
    verbose: if True, be a little verbose about the search

    On some OS, recursion can be specified by recursion depth (an integer).
    patterns can be specified with basic pattern matching. Additionally,
    multiple patterns can be specified by splitting patterns with a ';'
    For example:
        >>> find('pox*', root='..')
        ['/Users/foo/pox/pox', '/Users/foo/pox/scripts/pox_launcher.py']

        >>> find('*shutils*;*init*')
        ['/Users/foo/pox/pox/shutils.py', '/Users/foo/pox/pox/__init__.py']

>>>

আপনি যদি নজরদারি করেন তবে বাস্তবায়নটি এখানে রয়েছে: https://github.com/uqfoundation/pox/blob/89f90fb308f285ca7a62eabe2c38acb87e89 داد9 / pox / shutils.py#L190


17

ফাইল বা ডিরেক্টরি উপস্থিত রয়েছে তা পরীক্ষা করুন

আপনি এই তিনটি উপায় অনুসরণ করতে পারেন:

নোট 1: os.path.isfileশুধুমাত্র ফাইলের জন্য ব্যবহৃত

import os.path
os.path.isfile(filename) # True if file exists
os.path.isfile(dirname) # False if directory exists

নোট 2: os.path.existsফাইল এবং ডিরেক্টরি উভয়ের জন্য ব্যবহৃত

import os.path
os.path.exists(filename) # True if file exists
os.path.exists(dirname) #True if directory exists

pathlib.Pathপদ্ধতি (পাইথন অন্তর্ভুক্ত 3+, পাইথন 2 জন্য PIP এর সাথে ইনস্টলযোগ্য)

from pathlib import Path
Path(filename).exists()

16

আরও একটি সামান্য প্রকরণ যোগ করা যা অন্য উত্তরে হুবহু প্রতিফলিত হয় না।

এটি file_pathসত্তা Noneবা খালি স্ট্রিংয়ের ক্ষেত্রে পরিচালনা করবে ।

def file_exists(file_path):
    if not file_path:
        return False
    elif not os.path.isfile(file_path):
        return False
    else:
        return True

শাহবাজের পরামর্শের ভিত্তিতে একটি বৈকল্পিক যুক্ত করা হচ্ছে

def file_exists(file_path):
    if not file_path:
        return False
    else:
        return os.path.isfile(file_path)

পিটার উডের পরামর্শের ভিত্তিতে একটি বৈকল্পিক যুক্ত করা

def file_exists(file_path):
    return file_path and os.path.isfile(file_path):

3
if (x) return true; else return false;সত্যিই ঠিক return x। আপনার শেষ চারটি লাইন হয়ে উঠতে পারে return os.path.isfile(file_path)। আমরা যখন এটিতে থাকি তখন পুরো ফাংশনটিকে সরলীকৃত করা যায় return file_path and os.path.isfile(file_path)
শাহবাজ

return xক্ষেত্রে আপনাকে যত্নবান হতে হবে if (x)। পাইথন একটি খালি স্ট্রিং ভুয়া বিবেচনা করবে সেই ক্ষেত্রে আমরা বুলের পরিবর্তে খালি স্ট্রিংটি ফিরিয়ে আনব। এই ফাংশনটির উদ্দেশ্য হ'ল সর্বদা ফিরে আসুন।
মার্সেল উইলসন

1
সত্য। এই ক্ষেত্রে অবশ্য সালে xহয় os.path.isfile(..)তাই এটি ইতিমধ্যে bool হচ্ছে।
শাহবাজ

os.path.isfile(None)একটি ব্যতিক্রম উত্থাপন করে যার কারণে আমি যদি চেকটি যুক্ত করেছি। আমি সম্ভবত এটির পরিবর্তে ব্যতীত কেবল একটি চেষ্টা করে গুটিয়ে রাখতে পারি তবে আমি অনুভব করেছি যে এটি এটি আরও স্পষ্ট।
মার্সেল উইলসন

3
return file_path and os.path.isfile(file_path)
পিটার উড

15

লিনাক্স কমান্ড লাইন পরিবেশের জন্য এখানে একটি 1 লাইন পাইথন কমান্ড। আমি এই খুব হ্যান্ডি পাই যেহেতু আমি এত গরম বাশ লোক নই।

python -c "import os.path; print os.path.isfile('/path_to/file.xxx')"

আমি আশা করি এই সহায়ক।


6
বাশ-এ এক-লাইন চেক: [ -f "${file}" ] && echo "file found" || echo "file not found"(যা একইরকম if [ ... ]; then ...; else ...; fi)।
ফ্লোটজিলা

12

আপনি পাইথনের "ওএস" গ্রন্থাগারটি ব্যবহার করতে পারেন:

>>> import os
>>> os.path.exists("C:\\Users\\####\\Desktop\\test.txt") 
True
>>> os.path.exists("C:\\Users\\####\\Desktop\\test.tx")
False

5
এই উত্তরটি ভুল। os.path.existsডিরেক্টরি নয় এমন ফাইলগুলির জন্য সত্য প্রত্যাবর্তন করে। এটি মিথ্যা ইতিবাচক দেয়। প্রস্তাবিত অন্যান্য উত্তরগুলি দেখুন os.path.isfile
ক্রিস জনসন

@ ক্রিস জনসন, os.path.exists () ফাংশন সিস্টেমে কোনও পথ বিদ্যমান কিনা তা পরীক্ষা করে। পাঠ হ'ল প্রত্যক্ষ বা ফাইল হতে পারে। এটি উভয় ক্ষেত্রেই সূক্ষ্মভাবে কাজ করবে। অনুগ্রহ করে কিছু উদাহরণ দিয়ে চেষ্টা করুন
প্রদীপ দাশ

সুতরাং, এই উত্তর কাজ করে। গ্রেট। যদি পথটি কোনও ফাইলের না হয়। এটাই কি প্রশ্ন ছিল? নং
ডিবোস্মিত রায়

এটা নির্ভর করে. যদি কোনও "ফাইল" এর অস্তিত্ব নির্ধারণের লক্ষ্যটি যদি পাথটি ইতিমধ্যে বিদ্যমান (এবং সেইজন্য এমন কোনও পথ নয় যেখানে অন্যান্য তথ্য মুছে না ফেলে নতুন তথ্য সংরক্ষণ করা যায়) তবে existsতা ঠিক আছে। যদি লক্ষ্যটি নির্ধারণ করা হয় যে সম্ভবত এটি বিদ্যমান ফাইলটি খোলার পক্ষে নিরাপদ কিনা, তবে সমালোচনা ন্যায়সঙ্গত এবং উপস্থিত রয়েছে যা যথেষ্ট সুনির্দিষ্ট নয়। দুঃখের বিষয়, ওপি নির্দিষ্ট করে না কোনটি পছন্দসই লক্ষ্য (এবং সম্ভবত আর কোনও কাজ করবে না)।
স্টার্ট্টল্ট

12

ট্রাই স্টেটমেন্ট ব্যবহার না করে কোনও ফাইল উপস্থিত রয়েছে কিনা তা আমি কীভাবে চেক করব?

২০১ In সালে, এটি এখনও উভয়ই ফাইল উপস্থিত রয়েছে কিনা তা যাচাই করার সবচেয়ে সহজ উপায় এবং এটি যদি কোনও ফাইল হয়:

import os
os.path.isfile('./file.txt')    # Returns True if exists, else False

isfileপ্রকৃতপক্ষে কেবলমাত্র একটি সহায়ক পদ্ধতি যা অভ্যন্তরীণভাবে ব্যবহার করে os.statএবং stat.S_ISREG(mode)নীচে। এটি os.statএকটি নিম্ন-স্তরের পদ্ধতি যা আপনাকে ফাইল, ডিরেক্টরি, সকেট, বাফার এবং আরও অনেক কিছু সম্পর্কে বিশদ তথ্য সরবরাহ করবে। Os.stat সম্পর্কে আরও এখানে

দ্রষ্টব্য: তবে, এই পদ্ধতির ফলে কোনওভাবেই ফাইলটি লক হবে না এবং তাই আপনার কোডটি " ব্যবহারের সময় যাচাইয়ের সময় " ( ট্যাকটিউইউ ) বাগগুলির জন্য ঝুঁকির মধ্যে পড়ে ।

সুতরাং ব্যতিক্রম উত্থাপনকে আপনার প্রোগ্রামে প্রবাহ নিয়ন্ত্রণের জন্য গ্রহণযোগ্য এবং পাইথোনিক হিসাবে বিবেচনা করা হয়। এবং আইওআরফের সাথে নিখোঁজ ফাইলগুলি হ্যান্ডলিংয়ের কথা বিবেচনা করা উচিত, ifবিবৃতিগুলির চেয়ে ( কেবলমাত্র একটি পরামর্শ )।


9
import os.path

def isReadableFile(file_path, file_name):
    full_path = file_path + "/" + file_name
    try:
        if not os.path.exists(file_path):
            print "File path is invalid."
            return False
        elif not os.path.isfile(full_path):
            print "File does not exist."
            return False
        elif not os.access(full_path, os.R_OK):
            print "File cannot be read."
            return False
        else:
            print "File can be read."
            return True
    except IOError as ex:
        print "I/O error({0}): {1}".format(ex.errno, ex.strerror)
    except Error as ex:
        print "Error({0}): {1}".format(ex.errno, ex.strerror)
    return False
#------------------------------------------------------

path = "/usr/khaled/documents/puzzles"
fileName = "puzzle_1.txt"

isReadableFile(path, fileName)

@ j6m8 হ্যাঁ, প্রক্রিয়া isReadableFile(path,fileName)True
ha
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.