python directory ファイル作成 - ファイルが例外なく存在するかどうかを確認するにはどうすればよいですか?



15 Answers

あなたはos.path.exists関数を持っています:

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

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

os.path.isfile(file_path)

ファイルであるかどうかをテストします。 それはシンボリックリンクに続く。

フォルダー if 見つから

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



try文を優先します。 より良いスタイルと考えられ、競合状態を回避します。

私の言葉をそれに服用しないでください。 この理論のサポートはたくさんあります。 カップルです:




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




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

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




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

更新

ちょうど混乱を避けるために、私が得た答えに基づいて、現在の答えはファイルまたは指定された名前のディレクトリを見つけます。




ブライアンの提案は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



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

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

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




私は約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




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



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で不足しているファイルを処理することを検討する必要があります(単なるアドバイス)。




Related