web-dev-qa-db-ja.com

ファイルが例外なく存在するかどうかを確認する方法

try ステートメントを使用せずに、ファイルが存在するかどうかを確認する方法を教えてください。

4981
spence91

調べている理由がif file_exists: open_it()のようなことができるようになっている場合は、それを開く試みの周囲にtryを使用する方が安全です。確認してから開くと、ファイルが削除または移動されたり、確認してから開こうとするまでの間に何らかの危険性があります。

ファイルをすぐに開く予定がない場合は、 os.path.isfile を使用できます。

Pathが既存の通常ファイルの場合はTrueを返します。これはシンボリックリンクをたどるので、 islink()isfile() の両方が同じパスに当てはまります。

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

ファイルであることを確認する必要がある場合.

Python 3.4以降、 pathlibモジュール はオブジェクト指向のアプローチを提供します(Python 2.7ではpathlib2にバックポート)。

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

tryブロックでresolve(strict=True)を使うこともできます。

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

os.path.exists 関数があります。

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

これはファイルとディレクトリの両方に対してTrueを返しますが、代わりに使うことができます。

os.path.isfile(file_path)

それが特にファイルかどうかをテストするため。それはシンボリックリンクをたどります。

1913
PierreBdR

isfile() とは異なり、 exists() はディレクトリに対してTrueを返します。
したがって、普通のファイルだけでなくディレクトリも必要な場合は、isfile()またはexists()を使います。これは単純なREPLの出力です。

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

if os.path.isfile(filepath):
543
Paul

os.path.isfile()os.access() と共に使用します。

import os
import os.path

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"
268
Yugal Jindle
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
248
benefactual

これはファイルが存在するかどうかを確認する最も簡単な方法です。ちょうど なぜなら あなたがチェックした時に存在していたファイルは 保証 あなたがそれを開く必要がある時にそこにあるということです。

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

Python 3.4+ にはオブジェクト指向のパスモジュールがあります: pathlib 。この新しいモジュールを使用して、ファイルが次のように存在するかどうかを確認できます。

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

Pathlibモジュールには、便利なグロビング、ファイルの所有者のチェック、より簡単なパス結合など、たくさんの素晴らしい機能が含まれています。古いPython(バージョン2.6以降)を使用している場合でも、pipを使用してpathlibをインストールできます。

# 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
132
Cody Piersall

Try文を優先してください。それはより良いスタイルと見なされ、競合状態を避けます。

私のことばを取ってはいけません。この理論には十分な支持があります。これがカップルです:

116
pkoch

Tryステートメントを使用せずに、Pythonを使用してファイルが存在するかどうかを確認するにはどうすればよいですか?

Python 3.4以降で使用可能になり、ファイル名を使用してPathオブジェクトをインポートおよびインスタンス化し、is_fileメソッドを確認します(通常のファイルを指すシンボリックリンクでも同様にTrueを返します)。

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

Python 2を使用している場合は、pylib、 pathlib2 からpathlibモジュールをバックポートするか、またはos.pathモジュールからisfileを確認できます。

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

さて、上記はおそらくここで最も実用的な直接的な答えですが、競合状態の可能性があります(あなたが達成しようとしているものに依存します)、そして基礎となる実装がtryを使用するが、Pythonは使用するという事実tryはその実装のどこでも。

Pythonはあらゆる場所でtryを使用するため、実際にそれを使用する実装を避ける理由はありません。

しかし、この回答の残りの部分では、これらの警告を検討しようとします。

より長く、はるかに退屈な答え

Python 3.4以降で使用可能です。Pathで新しいpathlibオブジェクトを使用してください。ディレクトリはファイルではないため、.existsはまったく正しくないことに注意してください(Unixの意味でeverythingはファイルです)。

>>> 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_filetryを使用していることがわかります。

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を使用すると、ファイルの読み取りを試みますが、ファイルがあることを期待します。そうでない場合は、例外をキャッチし、フォールバック動作が意味のあるものを実行します。

読み取る前にファイルが存在することを確認し、それを削除する場合、複数のスレッドまたはプロセスを使用している場合、または別のプログラムがそのファイルを認識して削除する可能性がある場合- 競合条件存在することを確認した場合、racingその前にそれを開くcondition(その存在)変更。

競合状態をデバッグするのは非常に困難です。ウィンドウが非常に狭いため、プログラムが失敗する可能性があるためです。

しかし、これがあなたの動機である場合、cantryコンテキストマネージャーを使用してsuppressステートメントの値を取得します。

Tryステートメントなしの競合状態の回避:suppress

Python 3.4は 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()
... 
>>> 

以前のPythonの場合、独自のsuppressをロールできますが、tryを使用しないと、使用するよりも冗長になります。私は信じていますこれは実際にPythonのどのレベルでもtryを使用しない唯一の答えですPython 3.4代わりにコンテキストマネージャを使用するため:

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)

docs から:

os.path.isfile(path)

パスが既存の通常ファイルの場合、Trueを返します。これはシンボリックリンクに従うため、islink()isfile()の両方が同じパスに対してtrueになる場合があります。

しかし、この関数の source を調べると、実際にtryステートメントを使用していることがわかります。

# 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-exceptを使用して直接試行することをお勧めします。

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

os.access

UnixおよびWindowsで使用できるのはos.accessですが、使用するにはフラグを渡す必要があり、ファイルとディレクトリを区別しません。これは、実際の呼び出しユーザーが昇格された特権環境でアクセスできるかどうかをテストするために使用されます。

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

また、isfileと同じ競合状態の問題もあります。 docs から:

注:access()を使用して、ユーザーがたとえば実際にopen()を使用してファイルを開くと、セキュリティホールが作成されます。これは、ユーザーがファイルをチェックして開いてから操作するまでの短い時間間隔を利用する可能性があるためです。 EAFPテクニックを使用することをお勧めします。例えば:

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を呼び出します(「$ {PYTHON_SRC_DIR} /Modules/posixmodule.c」を介して)が、可能性のあるユーザーエラーのゲートを開き、他のバリアントほどPythonicではないからです:

この答えは、正当化のない、非Pythonicでエラーが発生しやすい方法を好むということです。ユーザーが低レベルAPIを理解せずに使用することを奨励しているようです。

また、無条件にTrueを返すことで、すべての例外(KeyboardInterruptおよびSystemExit!を含む)をサイレントに渡すことができるコンテキストマネージャーを作成します。これはバグを隠す良い方法です。

これは、ユーザーが不適切な慣行を採用することを奨励しているようです。

112
Aaron Hall
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をインポートすると、お使いのオペレーティングシステムでナビゲートして標準の操作を簡単に実行できます。

参考のために_ Pythonを使ってファイルが存在するかどうか調べる方法は? も見てください。

高度な操作が必要な場合はshutilを使用してください。

82
bishop

os.path.isfile()os.path.isdir()os.path.exists()によるファイルとフォルダのテスト

"path"が有効なパスであると仮定すると、この表はファイルとフォルダに対して各関数から返されるものを示しています。

enter image description here

ファイルが特定の種類のファイルであるかどうかをテストするには、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
75
Tom Fuller

2016年の最善の方法はまだos.path.isfileを使うことです。

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

あるいはPython 3ではpathlibを使うことができます。

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

Try/exceptとisfile()の間には意味のある機能上の違いがあるようには見えませんので、どちらを使用するのが妥当かを判断してください。

ファイルを読み込みたい場合、もしあれば

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

しかし、ファイルが存在する場合にそのファイルの名前を変更するだけで、そのファイルを開く必要がない場合は、次のようにします。

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

ファイルに書き込みたい場合、もしそれが存在しなければ、

# 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'

ファイルのロックが必要な場合、それは別の問題です。

62
chad

あなたはこれを試すことができます(より安全):

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

次に、結果に応じて、プログラムをそこから実行し続けることも、必要に応じて停止するようにコーディングすることもできます。

53
philberndt

私はいつもtryexceptステートメントを使うことをお勧めしますが、ここにいくつかの可能性があります(私のお気に入りはos.accessを使うことです):

  1. ファイルを開いてみてください。

    ファイルを開くと常にファイルの存在が確認されます。あなたはそのように関数を作ることができます:

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

    もしそれがFalseなら、それ以降のバージョンのPythonでは、手渡されていないIOErrorまたはOSErrorで実行を停止します。例外をキャッチするには、try except節を使用する必要があります。もちろん、あなたはいつでもtry except`ステートメントを使うことができます( hsandt のおかげで私に考えさせてくれます):

    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 _ vs _ lbyp _ )。後でファイルを開くのではなく、その存在を確認するだけの場合は、これを使用できます。

    とにかく、ここ:

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

私はあなたがファイルの存在を確認することができないだろう2つの方法があることにも言及するべきです。問題はpermission deniedまたはno such file or directoryのどちらかになります。 IOErrorを見つけた場合は、IOError as eを設定し(私の最初のオプションと同様に)、print(e.args)を入力して問題を判別できるようにします。私はそれが役立つことを願っています! :)

48
Zizouz212

日付: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']}
42
JawSaw

さらに、os.access()

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

R_OKW_OK、およびX_OKを許可をテストするためのフラグにする( doc )。

32
zgoda

ファイルが開かれている場合は、以下の手法のいずれかを使用できます。

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

_アップデート_

混乱を避けるために、そして私が得た答えに基づいて、現在の答えは与えられた名前のファイル または ディレクトリを見つけます。

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

例外を発生させることは、あなたのプログラムにおけるフロー制御のための容認できる、そしてPythonicの、アプローチであると考えられます。不足しているファイルをIOErrorsで処理することを検討してください。この状況では、ファイルは存在してもユーザーに読み取り権限がないとIOError例外が発生します。

SRC: http://www.pfinn.net/python-check-if-file-exists.html

20
Pedro Lobito

try:なしでBrianの提案を書くことができます。

from contextlib import suppress

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

suppressはPython 3.4の一部です。古いリリースでは、あなたはすぐにあなた自身の抑制を書くことができます:

from contextlib import contextmanager

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

他の目的ですでにNumPyをインポートした場合は、pathlibospathsなどの他のライブラリをインポートする必要はありません。

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

これはその存在に基づいてtrueまたはfalseを返します。

17
durjoy

ファイルまたはディレクトリが存在するか確認してください

次の3つの方法があります。

注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メソッド(Python 3+に含まれています。Python2の場合はpipでインストール可能です)

from pathlib import Path
Path(filename).exists()
16
Ali Hallaji

他の答えに正確には反映されていないもう1つのわずかな変化を追加します。

これはfile_pathNoneまたは空文字列の場合を扱います。

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

Shahbazからの提案に基づいてバリアントを追加する

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

Peter Woodからの提案に基づいてバリアントを追加する

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

私は10年ほど前から出回っているパッケージの作者です、そしてそれはこの問題に直接取り組む機能を持っています。基本的に、あなたがWindows以外のシステムを使っているなら、Popenを使ってfindにアクセスします。ただし、Windowsを使用している場合は、効率的なファイルシステムウォーカーを使用してfindが複製されます。

コード自体は、オペレーティングシステムを決定して「Unix」スタイルのtryまたはhand-buillt findを使用する場合を除いて、findブロックを使用しません。タイミングテストの結果、tryの方がOSを決定するのが早いことがわかりました。そこで私はそれを使用しました(ただし他にはありません)。

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

15
Mike McKerns

これがLinuxコマンドライン環境用の1行のPythonコマンドです。私はそんなに熱いBash男ではないので、私はこの非常に手の込んだものを見つけます。

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

これが役に立つことを願っています。

try文を使わずにファイルが存在するかどうかをどうやって確認するのですか?

2016年には、これはまだ間違いなくファイルが存在するかどうかとそれがファイルであるかどうかを確認する最も簡単な方法です。

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

isfileは、実際には内部でos.statstat.S_ISREG(mode)を内部で使用するヘルパーメソッドです。このos.statは、ファイル、ディレクトリ、ソケット、バッファなどに関する詳細情報を提供する低レベルのメソッドです。 os.statの詳細はこちら

注: ただし、この方法ではファイルがロックされることはありません。したがって、コードは " 使用時間に対するチェック時間 "に対して脆弱になる可能性があります(TOCTTOU)のバグ。

そのため、例外を発生させることは、あなたのプログラムにおけるフロー制御のための許容できる、そしてPythonicの、アプローチと考えられます。そしてifステートメント(単なるアドバイス)ではなく、不足しているファイルをIOErrorsで処理することを検討するべきです。

11
Inconnu

Pythonの "OS"ライブラリを使うことができます。

>>> import os
>>> os.path.exists("C:\\Users\\####\\Desktop\\test.txt") 
True
>>> os.path.exists("C:\\Users\\####\\Desktop\\test.tx")
False
11
Pradip Das
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)
9
Khaled.K

次のopenメソッドを使ってファイルが存在するかどうかを確認することができます。

open(inputFile, 'r')
9
user3197473
import os
path = /path/to/dir

root,dirs,files = os.walk(path).next()
if myfile in files:
   print "yes it exists"

これはいくつかのファイルをチェックするときに役に立ちます。または、既存のリストを使って集合の交差/減算を行います。

8
Jesvin Jose

ファイルが存在するかどうかを確認するには

from sys import argv

from os.path import exists
script, filename = argv
target = open(filename)
print "file exists: %r" % exists(filename)
7
Hanson

ファイルが特定のディレクトリにあるかどうかを確認するには、os.listdirを使用します。

import os
if 'file.ext' in os.listdir('dirpath'):
    #code
5
iPhynx
import os

# for testing purpose args defaulted to current folder & file. 
# returns True if file found
def file_exists(FOLDER_PATH='../', FILE_NAME=__file__):
    return os.path.isdir(FOLDER_PATH) \
        and os.path.isfile(os.path.join(FOLDER_PATH, FILE_NAME))

基本的にはフォルダチェック、次に os.path.join を使用して適切なディレクトリセパレータを使用したファイルチェックを行います。

4

あなたは間違いなくこれを使うべきです。

from os.path import exists

if exists("file") == True:
    print "File exists."
Elif exists("file") == False:
    print "File doesn't exist."
3
user2154354

おそらく必要ではありませんが、もしそうなら、ここにいくつかのコードがあります

import os

def file_exists(path, filename):
    for file_or_folder in os.listdir(path):
        if file_or_folder == filename:
            return True
    return False