見つから - フォルダ 存在 チェック python




ファイルが例外なく存在するかどうかを確認するにはどうすればよいですか? (20)

try文を使用せずにファイルが存在するかどうかを確認するにはどうすればよいですか?


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を使用している場合は、pathlibモジュールをpypi、 pathlib2からバックポートするか、os.pathモ​​ジュールからisfileをチェックします。

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

今はおそらく上記の方が実用的な直接的な答えかもしれませんが、競合状態(あなたが達成しようとしているものに依存します)があり、基本的な実装でtry使用していますが、Pythonは実装。

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

しかし、この答えの残りの部分では、これらの注意点を検討しようとしています。

より長く、はるかにペタニックな答え

Python 3.4以降では、 pathlib新しいPathオブジェクトを使用してpathlib.existsは、ディレクトリがファイルではないので(UNIXの意味ではすべてがファイルであることを除いて)、正しくないことに注意してください。

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

ですから、 is_fileを使う必要があります:

>>> root.is_file()
False

is_fileのヘルプは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

しかし、 実装を掘り下げるtryis_filetry使用していることがis_fileます。

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

ファイルを読み込もうとする前にファイルが存在していて、それを削除して複数のスレッドやプロセスを使用していたり​​、別のプログラムがそのファイルを知っていて削除する可能性がある場合は、 条件が存在する前にそれを開くようにレースしているため、 競合状態が存在することを確認すると競合状態になります。

競合状態はデバッグするのが非常に難しいです。非常に小さなウィンドウでプログラムが失敗する可能性があるからです。

しかし、これがあなたの動機であれば、 suppressコンテキストマネージャを使ってtry文の値を得ることができます。

try文を使用しない競合条件の回避: suppress

Python 3.4では、 suppressコンテキストマネージャー(以前はコンテキストマネージャーをignoreていました)を提供しています。これは、より少ない行で意味​​的に全く同じことを行いますが、

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 3.4の前に適用できるPythonのあらゆるレベルで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)

docsから:

os.path.isfile(path)

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

しかし、この関数の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と同じ競合状態の問題を抱えていisfiledocsから:

注意:open()を使用して実際にファイルを開く前にユーザーがファイルを開く権限を持っているかどうかを確認するためにaccess()を使用すると、セキュリティホールが作成されます。 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ではなく、 :

この答えは、それが正当化されていない、Python以外の、エラーを起こしやすい方法を好むと言います。 ユーザーが理解していない低レベルのAPIを使用するように促すようです。

True無条件に返すことで、 KeyboardInterruptSystemExit !を含むすべての例外を静かに渡すことができるコンテキストマネージャーを作成します。これはバグを隠す良い方法です。

これはユーザーに貧困対策を採用するよう促しているようです。


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)バグに脆弱になる可能性があります。

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


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():
    ...

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'

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


isfile()とは異なり、 exists()はディレクトリに対してTrueを返し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

os.access() os.path.isfile()os.path.isfile()を使用します。

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"

2017/12/22

ほぼすべての可能な方法が既存の回答(少なくともPython 3.4のものが追加された)に(少なくとも1つ)リストされていますが、私はすべてをまとめてグループ化しようとします。

:私が投稿しようとしているPythonの標準ライブラリコードはすべて、バージョン3.5.3に属しています(doc引用符はバージョン3固有のものです)。

問題文

  1. チェックファイル( 議論 :フォルダー( "特別"ファイル)?)存在
  2. try / except / else / finallyブロックは使用しないでください

可能な解決策

  1. [Python]:os.path。 存在するpathos.path.isfileos.path.isdiros.path.lexistsような他の関数ファミリのメンバもやや異なる挙動をチェックする)

    os.path.exists(path)
    

    pathが既存のパスまたは開いているファイル記述子を参照する場合はTrue返します。 壊れたシンボリックリンクに対してFalseを返します。 一部のプラットフォームでは、 パスが物理的に存在する場合でも、要求されたファイルに対してos.stat()を実行する権限が与えられていない場合、この関数はFalse返すことがあります。

    すべて良いですが、インポートツリーに従っている場合:

    • os.path - posixpath.pyntpath.py

      • genericpath.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
        

    os.stat()周りのtry/exceptブロックos.stat() os.stat() 。 だから、あなたのコードはtry/except free try/exceptますが、フレームスタックの下位には少なくともそのようなブロックが1つあります。 これは他の関数( os.path.isfile を含む )にも当てはまります。

    1.1。 [Python]:pathlib.Path。 is_file ()

    • これは、より扱いやすい(そしてより多くのpython icの)経路を扱う方法ですが、
    • フードの下では、 まったく同じことをします( pathlib.py 、行〜#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. [Python]:ステートメントコンテキストマネージャを使用 。 どちらか:

    • 一つ作る:

      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 ...)
      
      • そしてその使い方 - 私は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
        
    • [Python]:contextlibを使用してください 抑制*例外 - 例外を選択的に抑制するために特別に設計された


    しかし、それらはtry/except/else/finallyブロック上のラッパーであるように見えます。 [Python]: withステートメントの状態:

    これにより、一般的なtry ... except ... finally使用パターンがカプセル化され、再利用が容易になります。

  3. ファイルシステムのトラバース関数(および一致する項目の検索結果)


    これらはフォルダを繰り返し処理するので(ほとんどの場合)、私たちの問題では非効率的です(@ shadowRangerが指摘しているように、例外はありません)。 場合によっては、ファイル名の処理が必要な場合もあります。

  4. [Python]:os。 その挙動がos.path.exists近い(実際には2 番目の引数のために実際にはより広いアクセスpath、mode、*、dir_fd = None、effective_ids = False、follow_symlinks = True

    • ドキュメントの状態に応じて、ユーザー権限によってファイルの「可視性」が制限されることがあります。

      ...呼び出すユーザーが指定されたパスへのアクセス権を持っているかどうかをテストしますモードF_OKでパスの存在をテストする必要があります...

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

    私もC言語で作業しているので、このメソッドを使うこともできます。これは、 ネイティブAPIを"$ {PYTHON_SRC_DIR} /Modules/posixmodule.c"を介して)呼び出しますが、可能なユーザーのためのゲートも開きますエラーが発生し 、他の亜種と同じようにPython ICではありません。 @AaronHallが正しく指摘したように、あなたが何をしているのか分からない限り、それを使用しないでください:

    :ネイティブAPIを呼び出すことも可能です。[Python]: ctypes - Python用の外部関数ライブラリですが、ほとんどの場合、より複雑です。

    Win固有): msvcr *vcruntime * )は[MSDN]:_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", os.F_OK)
    -1
    

    • それは良い習慣ではありませんが、私は呼び出しでos.F_OKを使用していますが、それは分かりやすくするためです(その値は0です
    • 私は同じコードがPython3Python2で動作するように_waccess使用していますUnicodeに関連する違いにもかかわらず)
    • これは非常に特定の分野を対象としていますが、これまでの回答には言及されていません


    LnxUbtu(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"/tmp1", os.F_OK)
    -1
    

    • libcのパス( "/lib/x86_64-linux-gnu/libc.so.6" )をハードコードするのではなく、システムによって変わる可能性がありますが、おそらくNone (または空の文字列)はCDLLコンストラクタに渡すことができます( ctypes.CDLL(None).access(b"/tmp", os.F_OK) )。 [男]によると:DLOPEN(3)

      filenameがNULLの場合、返されるハンドルはメインプログラムのハンドルです。 dlsym ()に与えられると、このハンドルは、プログラムの起動時にロードされたすべての共有オブジェクト、次にdlopen ()によってロードされたすべての共有オブジェクトをフラグRTLD_GLOBALで検索します。

      • メイン(現在の)プログラム( python )はlibcとリンクしているので、そのシンボル( accessを含む)がロードされます
      • これは、 mainPy_Mainなどの関数が利用可能であるため、注意して処理する必要があります。 それらを呼び出すことは悲惨な影響を与える可能性があります(現在のプログラムで)
      • msvcrt.dllはデフォルトで%PATH%にある"%SystemRoot%\ System32"にありますので、これはWinにも当てはまりません(しかしそれほど大きな問題はありません )。 私はさらに物事を取って、 Winでこの動作を複製したい(パッチを提出する)が、実際には[MSDN]:GetProcAddress関数エクスポートされたシンボルしか見ることができないので、誰かがmain実行可能ファイルの関数を__declspec(dllexport) (どうして地球上で普通の人がそうするのでしょうか?)、メインプログラムは読み込み可能ですがかなり使用できません
  5. ファイルシステム機能を備えたサードパーティのモジュールをインストールする

    ほとんどの場合、上記の方法の1つに依存しています(おそらくわずかなカスタマイズで)。
    GitHub):Python for Windows(pywin32)Extensionsは、 WINAPI上Pythonラッパーです。

    しかし、これは回避策に似ているので、私はここでやります。

  6. 別の( 色あせ )回避策( gainarie )は、 sysadminのアプローチです( Pythonをラッパーとして使用してシェルコマンドを実行します)

    • 勝つ

      (py35x64_test) e:\Work\Dev\\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\\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
      
    • LnxUbtu ):

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

ボトムライン

  • try / except / else / finallyブロックexcept使用してtry 。これにより、一連の厄介な問題が発生するのを防ぐことができます。 私が考えることができる反例はパフォーマンスです。そのようなブロックはコストがかかるので、毎秒何十万回も実行するはずのコードに配置しないようにしてください(ただし、ほとんどの場合、ディスクアクセス、それは事実ではない)。

最終的な注釈

  • 私はそれを最新に保つように努力します、どんな提案も歓迎です、私は答えになる有用なものを取り入れます

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モジュールには便利なglobbing、ファイルの所有者のチェック、簡単なパスの結合など、たくさんのクールなものがあります。チェックアウトする価値があります。 古いPython(バージョン2.6以降)を使用している場合でも、piplibをpipでインストールできます。

# 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

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

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

あなたがチェックしている理由がif file_exists: open_it()ようなことができるif file_exists: open_it() 、それを開こうとする試みをtry安全です。 チェックしてから開くと、ファイルが削除されたり、移動されたり、チェックするときと開くときの間にリスクが発生します。

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

パスが既存の通常ファイルの場合はTrue返します。 これはシンボリックリンクに従うので、 islink()os.path.isfile両方が同じパスに対して真である可能性があります。

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

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

Python 3.4以降、 pathlibモジュールはオブジェクト指向のアプローチを提供しています(Python 2.7でpathlib2にバックポートされてい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()使用しexists()

if my_file.exists():
    # path exists

tryブロックでresolve()を使うこともできます:

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

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

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

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


これは、ファイルが存在するかどうかを確認する最も簡単な方法です。 チェックしたときにファイルが存在したからといって、ファイルを開く必要があるときにファイルが存在することを保証するものではありません。

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

他の回答に正確に反映されていない1つの微妙なバリエーションを追加します。

これは、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

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

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

Linuxコマンドライン環境用の1行のPythonコマンドです。私はこのような暑いバッシュの男ではないので、私はこの非常にハンディを見つける。

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

これが参考になることを願っています。


あなたが他の目的のために既にnumpyのをインポートした場合、その後のような他のライブラリをインポートする必要はありませんpathlibospathsなどは、

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

これは、その存在に基づいて真または偽を返します。


ブライアンの提案はthe try:

from contextlib import suppress

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

suppressPython 3.4の一部です。古いリリースでは、すぐに独自の抑制を書くことができます:

from contextlib import contextmanager

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

私は約10年の間存在していたパッケージの作者であり、この質問に直接対処する機能を持っています。基本的に、Windows以外のシステムにいる場合はPopen、アクセスするために使用されますfind。しかし、Windowsの場合はfind、効率的なファイルシステムウォーカーで複製します。

コード自体はtry、オペレーティングシステムを決定することを除いて、ブロックを使用しないので、あなたを "Unix"スタイルfindまたは手持ちのものに向けることができfindます。タイミングテストではtry、OSの決定がより速かったので、私はそこで1つを使用しました(ただしどこも)。

>>> 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 : https://github.com/uqfoundation/pox/blob/89f90fb308f285ca7a62eabe2c38acb87e89dad9/pox/shutils.py#L190


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も参照share

高レベルの操作が必要な場合は、 shutil使用してshutil


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




file-exists