Soru Bir dosyanın olup olmadığını nasıl kontrol ederim?


Kullanmadan bir dosyanın var olup olmadığını nasıl görebilirim try Beyan?


4361
2017-09-17 12:55


Menşei




Cevaplar:


Kontrol etmenizin sebebi varsa, if file_exists: open_it()kullanmak için daha güvenli try açmak için girişimi etrafında. Kontrol ediliyor ve sonra açılacak dosya siliniyor veya taşınıyor veya kontrol ettiğinizde ve açmaya çalıştığınızda bir şey oluyor.

Dosyayı hemen açmayı planlamıyorsanız, kullanabilirsiniz. os.path.isfile

Dönüş True yol mevcut bir normal dosyaysa. Bu sembolik bağları izler, böylece ikisi de islink () ve isfile () aynı yol için doğru olabilir.

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

Bir dosya olduğundan emin olmanız gerekiyorsa.

Python 3.4 ile başlayarak, pathlib modül nesne yönelimli bir yaklaşım sunar pathlib2 Python'da 2.7):

from pathlib import Path

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

Bir dizini kontrol etmek için şunu yapın:

if my_file.is_dir():
    # directory exists

Olup olmadığını kontrol etmek için Path Nesne, bir dosya veya dizin olup olmadığı bağımsız olarak bulunur. exists():

if my_file.exists():
    # path exists

Ayrıca kullanabilirsiniz resolve() içinde try blok:

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

3963
2017-09-17 12:57



ilk açıklama ile ilgili olarak (“açık” kontrol etmeden önce kontrol et seçeneğini kullanın) maalesef bu, eğer varolan bir “mod” oluşmayacağından beri var olduğundan emin olmak için açmak istiyorsanız açmak işe yaramaz. - makapuf
alırım os.path.isfile mevcut değil. - JeromeJ


Sende os.path.exists fonksiyon:

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

Bu döner True hem dosyalar hem de dizinler için

os.path.isfile(file_name)

Özellikle bir dosya olup olmadığını test etmek için. Symlinks izler.


1626
2017-09-17 12:57





aksine isfile(), exists() dönecek True dizinler için.
Yani sadece düz dosyalara veya dizinlere de ihtiyacınız varsa isfile() veya exists(). İşte basit bir REPL çıkışı.

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

837
2017-09-17 15:01





import os.path

if os.path.isfile(filepath):

468
2017-09-17 12:55





kullanım os.path.isfile() ile 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"

223
2018-01-16 05:57



Bazıları gereksiz olan birden fazla koşula sahip olmak, az açık ve net. - wim
Ayrıca gereksizdir. Dosya mevcut değilse os.access() yanlış dönecektir. - user207421
@EJP Linux dosyalarında bulunabilir ancak erişilebilir değil. - e-info128


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

209
2017-09-17 12:56



Bu cevap yanlış. os.path.exists dizinler gibi dosyalar olmayan şeyler için true değerini döndürür. Bu yanlış pozitif verir. Tavsiye eden diğer cevapları görün os.path.isfile. - Chris Johnson
Bir dizin bir dosya türüdür unix.stackexchange.com/questions/197439/... - James Roth


Bir dosya olup olmadığını kontrol etmenin en basit yolu budur. Sadece Çünkü kontrol ettiğinizde dosya mevcut değil garanti açmanız gerektiğinde orada olacak.

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

139
2018-06-27 13:38



Dosyaya erişmeyi düşündüğünüz sürece, yarış durumu varProgramınızın nasıl yapıldığına bakılmaksızın. Programınız, bilgisayardaki başka bir işlemin dosyayı değiştirmediğini garanti edemez. Eric Lippert'ın bir ekzojen istisna. Dosyanın varlığını önceden kontrol ederek bunu önleyemezsiniz. - Isaac Supeene
@IsaacSupeene En iyi uygulama, (dosya) işlemi penceresini olabildiğince küçük hale getirmek ve ardından istisnai bir istisna işlemi yapmaktır. - un33k