python मैं जांच कैसे करूं कि फ़ाइल अपवाद के बिना मौजूद है या नहीं?





15 Answers

आपके पास os.path.exists फ़ंक्शन है:

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

यह दोनों फाइलों और निर्देशिकाओं के लिए True लेकिन आप इसके बजाय उपयोग कर सकते हैं

os.path.isfile(file_path)

यह जांचने के लिए कि क्या यह विशेष रूप से एक फ़ाइल है। यह सिम्लिंक का पालन करता है।

python file file-exists

मैं कैसे देख सकता हूं कि कोई फ़ाइल मौजूद है या नहीं, try कथन का उपयोग किए बिना?




import os.path

if os.path.isfile(filepath):



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



फ़ाइल मौजूद है या नहीं यह जांचने का सबसे आसान तरीका है। सिर्फ इसलिए कि फ़ाइल चेक होने पर मौजूद थी, यह गारंटी नहीं देता है कि जब आप इसे खोलने की आवश्यकता होगी तो यह वहां होगा।

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")



कोशिश कथन पसंद करते हैं। इसे बेहतर शैली माना जाता है और दौड़ की स्थिति से बचा जाता है।

इसके लिए मेरा शब्द मत लो। इस सिद्धांत के लिए बहुत सारे समर्थन हैं। यहां एक जोड़ा है:




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 आयात करना आपके ऑपरेटिंग सिस्टम के साथ नेविगेट करना और मानक क्रियाएं करना आसान बनाता है।

संदर्भ के लिए यह भी देखें share

यदि आपको उच्च स्तरीय संचालन की आवश्यकता है, तो shutil उपयोग shutil




2016 में सबसे अच्छा तरीका अभी भी os.path.isfile का उपयोग कर 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():
    ...



आप इसे (सुरक्षित) आज़मा सकते हैं:

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))

आउटपुट होगा:

([Errno 2] ऐसी कोई फ़ाइल या निर्देशिका नहीं: 'whatever.txt')

फिर, परिणाम के आधार पर, आपका प्रोग्राम केवल वहां से चल रहा है या यदि आप चाहें तो इसे रोकने के लिए कोड कर सकते हैं।




पायथन 3.4 में भाषा फाइलों को प्रबंधित करने के लिए एक नया मॉड्यूल प्रदान करती है:

import pathlib
path = pathlib.Path('path/to/file')
if path.is_file(): # If you want to check a directory: path.is_dir()
    # If it is true, return true on your code.



अगर फ़ाइल खोलने के लिए है तो आप निम्न तकनीकों में से एक का उपयोग कर सकते हैं:

>>> 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!')

अद्यतन करें

भ्रम से बचने के लिए और मुझे मिलने वाले उत्तरों के आधार पर, वर्तमान उत्तर या तो दिए गए नाम के साथ एक फ़ाइल या निर्देशिका पाता है ।




आप बिना ब्रायन के सुझाव लिख सकते हैं try:

from contextlib import suppress

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

suppressपायथन 3.4 का हिस्सा है। पुरानी रिलीज में आप जल्दी ही अपना दबदबा लिख ​​सकते हैं:

from contextlib import contextmanager

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



लिनक्स कमांड लाइन पर्यावरण के लिए यहां 1 लाइन पायथन कमांड है। मुझे यह बहुत अच्छा लगता है क्योंकि मैं इतना गर्म बैश लड़का नहीं हूं।

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

मुझे आशा है कि यह मददगार है।




मैं ऐसे पैकेज का लेखक हूं जो लगभग 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/89f90fb308f285ca7a62eabe2c38acb87e89dad9/pox/shutils.py#L190




दिनांक: 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']}



कोशिश कथन का उपयोग किये बिना मैं कैसे जांचूं कि फ़ाइल मौजूद है या नहीं?

2016 में, यह अभी भी जांचने का सबसे आसान तरीका है कि दोनों फाइल मौजूद हैं या नहीं और यदि यह एक फ़ाइल है:

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

isfileवास्तव में केवल एक सहायक तरीका है जो आंतरिक रूप से उपयोग करता है os.statऔर stat.S_ISREG(mode)नीचे। यह os.statएक निम्न-स्तरीय विधि है जो आपको फ़ाइलों, निर्देशिकाओं, सॉकेट, बफर आदि के बारे में विस्तृत जानकारी प्रदान करेगी। ओएसस्टैट के बारे में अधिक जानकारी यहां

नोट: हालांकि, यह दृष्टिकोण फ़ाइल को किसी भी तरह से लॉक नहीं करेगा और इसलिए आपका कोड "उपयोग के समय के चेक के समय " ( ट्यूटटू ) कीड़े के लिए कमजोर हो सकता है ।

इसलिए अपवादों को बढ़ाने के लिए स्वीकार्य माना जाता है, और पाइथोनिक, आपके कार्यक्रम में प्रवाह नियंत्रण के लिए दृष्टिकोण। और किसी को ifबयान के बजाय गायब फाइलों को IOErrors के साथ संभालने पर विचार करना चाहिए ( केवल एक सलाह )।




Related