it-swarm-id.com

Bagaimana saya memeriksa apakah ada file?

Bagaimana saya melihat apakah ada file atau tidak, tanpa menggunakan try statement?

4981
spence91

Jika alasan Anda memeriksa adalah agar Anda dapat melakukan sesuatu seperti if file_exists: open_it(), lebih aman untuk menggunakan try saat mencoba membukanya. Memeriksa dan kemudian membuka risiko file dihapus atau dipindahkan atau ada sesuatu antara ketika Anda memeriksa dan ketika Anda mencoba untuk membukanya.

Jika Anda tidak berencana untuk segera membuka file, Anda dapat menggunakan os.path.isfile

Kembalikan True jika path adalah file reguler yang ada. Ini mengikuti tautan simbolik, sehingga islink () dan isfile () bisa benar untuk jalur yang sama.

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

jika Anda perlu memastikan itu adalah file.

Dimulai dengan Python 3.4, modul pathlib menawarkan pendekatan berorientasi objek (di-backport ke pathlib2 dengan Python 2.7):

from pathlib import Path

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

Untuk memeriksa direktori, lakukan:

if my_file.is_dir():
    # directory exists

Untuk memeriksa apakah objek Path ada secara independen dari apakah itu file atau direktori, gunakan exists():

if my_file.exists():
    # path exists

Anda juga dapat menggunakan resolve(strict=True) dalam blok try:

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

Anda memiliki os.path.exists fungsi:

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

Ini mengembalikan True untuk file dan direktori tetapi Anda dapat menggunakannya

os.path.isfile(file_path)

untuk menguji apakah itu file khusus. Ini mengikuti symlink.

1913
PierreBdR

Tidak seperti isfile() , exists() akan mengembalikan True untuk direktori.
Jadi tergantung pada apakah Anda hanya menginginkan file biasa atau juga direktori, Anda akan menggunakan isfile() atau exists(). Berikut ini adalah keluaran REPL sederhana.

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

Gunakan os.path.isfile() dengan 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

Ini adalah cara paling sederhana untuk memeriksa apakah ada file. Hanya karena file ada ketika Anda memeriksa tidak menjamin bahwa file itu akan ada di sana saat Anda perlu membukanya.

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+ memiliki modul path berorientasi objek: pathlib . Menggunakan modul baru ini, Anda dapat memeriksa apakah ada file seperti ini:

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

Anda dapat (dan biasanya seharusnya) masih menggunakan blok try/except saat membuka file:

try:
    with p.open() as f:
        # do awesome stuff
except OSError:
    print('Well darn.')

Modul pathlib memiliki banyak hal keren di dalamnya: globbing yang nyaman, memeriksa pemilik file, bergabung dengan jalur yang lebih mudah, dll. Perlu dicoba. Jika Anda menggunakan Python yang lebih lama (versi 2.6 atau yang lebih baru), Anda masih dapat menginstal pathlib dengan pip:

# installs pathlib2 on older Python versions
# the original third-party module, pathlib, is no longer maintained.
pip install pathlib2

Kemudian impor sebagai berikut:

# Older Python versions
import pathlib2 as pathlib
132
Cody Piersall

Lebih suka pernyataan coba. Itu dianggap gaya yang lebih baik dan menghindari kondisi balapan.

Jangan mengambil kata-kata saya untuk itu. Ada banyak dukungan untuk teori ini. Inilah pasangan:

116
pkoch

Bagaimana cara memeriksa apakah ada file, menggunakan Python, tanpa menggunakan pernyataan coba-coba?

Sekarang tersedia sejak Python 3.4, impor dan instantiate objek Path dengan nama file, dan periksa metode is_file (perhatikan bahwa ini mengembalikan True untuk symlink yang menunjuk ke file biasa juga):

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

Jika Anda menggunakan Python 2, Anda dapat backport modul pathlib dari pypi, pathlib2 , atau periksa isfile dari modul os.path:

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

Sekarang jawaban di atas mungkin adalah jawaban langsung pragmatis terbaik di sini, tetapi ada kemungkinan kondisi balapan (tergantung pada apa yang ingin Anda capai), dan fakta bahwa implementasi yang mendasarinya menggunakan try, tetapi Python menggunakan try di mana-mana di dalamnya pelaksanaan.

Karena Python menggunakan try di mana-mana, sebenarnya tidak ada alasan untuk menghindari implementasi yang menggunakannya.

Tetapi sisa dari jawaban ini mencoba untuk mempertimbangkan peringatan ini.

Lagi, jawaban yang jauh lebih menyolok

Tersedia sejak Python 3.4, gunakan objek Path baru di pathlib. Perhatikan bahwa .exists tidak sepenuhnya benar, karena direktori bukan file (kecuali dalam arti unix bahwa semuanya adalah file).

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

Jadi kita perlu menggunakan is_file:

>>> root.is_file()
False

Berikut bantuan pada is_file:

is_file(self)
    Whether this path is a regular file (also True for symlinks pointing
    to regular files).

Jadi mari kita dapatkan file yang kita tahu adalah file:

>>> import tempfile
>>> file = tempfile.NamedTemporaryFile()
>>> filepathobj = Path(file.name)
>>> filepathobj.is_file()
True
>>> filepathobj.exists()
True

Secara default, NamedTemporaryFile menghapus file ketika ditutup (dan secara otomatis akan menutup ketika tidak ada lagi referensi untuk itu).

>>> del file
>>> filepathobj.exists()
False
>>> filepathobj.is_file()
False

Jika Anda Menggali implementasi , meskipun, Anda akan melihat bahwa is_file menggunakan try:

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

Kondisi Balapan: Mengapa kami suka mencoba

Kami menyukai try karena menghindari kondisi balapan. Dengan try, Anda cukup mencoba membaca file Anda, mengharapkannya ada di sana, dan jika tidak, Anda menangkap pengecualian dan melakukan apa pun perilaku mundur yang masuk akal.

Jika Anda ingin memeriksa apakah ada file sebelum Anda mencoba membacanya, dan Anda mungkin menghapusnya dan kemudian Anda mungkin menggunakan beberapa utas atau proses, atau program lain tahu tentang file itu dan dapat menghapusnya - Anda berisiko kemungkinan a kondisi balapan jika Anda memeriksa itu ada, karena Anda kemudian balap untuk membukanya sebelum kondisi (keberadaannya) berubah.

Kondisi ras sangat sulit untuk di-debug karena ada jendela yang sangat kecil di mana mereka dapat menyebabkan program Anda gagal.

Tetapi jika ini adalah motivasi Anda, Anda bisa mendapatkan nilai pernyataan try dengan menggunakan manajer konteks suppress.

Menghindari kondisi balapan tanpa pernyataan coba: suppress

Python 3.4 memberi kita suppress context manager (sebelumnya ignore context manager), yang secara semantik persis sama dengan baris yang lebih sedikit, sementara juga (setidaknya secara dangkal) memenuhi permintaan asli untuk menghindari try pernyataan:

from contextlib import suppress
from pathlib import Path

Pemakaian:

>>> with suppress(OSError), Path('doesnotexist').open() as f:
...     for line in f:
...         print(line)
... 
>>>
>>> with suppress(OSError):
...     Path('doesnotexist').unlink()
... 
>>> 

Untuk Python sebelumnya, Anda bisa menggulung suppress Anda sendiri, tetapi tanpa try akan lebih bertele-tele daripada dengan. Saya percaya ini sebenarnya adalah satu-satunya jawaban yang tidak menggunakan try pada tingkat apa pun di Python yang dapat diterapkan sebelum Python 3.4 karena ia menggunakan konteks manajer sebagai gantinya:

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)

Mungkin lebih mudah dengan mencoba:

from contextlib import contextmanager

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

Opsi lain yang tidak memenuhi permintaan "tanpa coba":

isfile

import os
os.path.isfile(path)

dari docs :

os.path.isfile(path)

Return True jika path adalah file biasa yang sudah ada. Ini mengikuti tautan simbolis, sehingga islink() dan isfile() bisa benar untuk jalur yang sama.

Tetapi jika Anda memeriksa source dari fungsi ini, Anda akan melihatnya benar-benar menggunakan pernyataan coba:

# 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

Semua yang dilakukannya adalah menggunakan jalur yang diberikan untuk melihat apakah bisa mendapatkan statistik di atasnya, menangkap OSError dan kemudian memeriksa apakah itu file jika tidak menaikkan pengecualian.

Jika Anda berniat melakukan sesuatu dengan file tersebut, saya akan menyarankan langsung mencoba dengan mencoba-kecuali untuk menghindari kondisi balapan:

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

os.access

Tersedia untuk Unix dan Windows adalah os.access, tetapi untuk menggunakan Anda harus melewati flag, dan tidak membedakan antara file dan direktori. Ini lebih digunakan untuk menguji apakah pengguna pemohon yang sebenarnya memiliki akses di lingkungan privilege yang tinggi:

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

Itu juga menderita masalah kondisi ras yang sama seperti isfile. Dari docs :

Catatan: Menggunakan akses () untuk memeriksa apakah pengguna diizinkan untuk mis. buka file sebelum benar-benar melakukannya menggunakan open () menciptakan lubang keamanan, karena pengguna dapat memanfaatkan interval waktu singkat antara memeriksa dan membuka file untuk memanipulasinya. Lebih disukai menggunakan teknik EAFP. Sebagai contoh:

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

lebih baik ditulis sebagai:

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

Hindari menggunakan os.access. Ini adalah fungsi tingkat rendah yang memiliki lebih banyak peluang untuk kesalahan pengguna daripada objek tingkat tinggi dan fungsi yang dibahas di atas.

Kritik atas jawaban lain:

Jawaban lain mengatakan ini tentang os.access:

Secara pribadi, saya lebih suka yang ini karena di bawah tenda, ia memanggil API asli (melalui "$ {PYTHON_SRC_DIR} /Modules/posixmodule.c"), tetapi juga membuka gerbang untuk kemungkinan kesalahan pengguna, dan itu tidak terlalu Pythonic seperti varian lainnya :

Jawaban ini mengatakan lebih memilih metode non-Pythonic, rawan kesalahan, tanpa pembenaran. Tampaknya mendorong pengguna untuk menggunakan API tingkat rendah tanpa memahaminya.

Ini juga menciptakan manajer konteks yang, dengan mengembalikan tanpa syarat True, memungkinkan semua Pengecualian (termasuk KeyboardInterrupt dan SystemExit!) Untuk dilewati secara diam-diam, yang merupakan cara yang baik untuk menyembunyikan bug.

Ini tampaknya mendorong pengguna untuk mengadopsi praktik buruk.

110
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!"

Mengimpor os memudahkan navigasi dan melakukan tindakan standar dengan sistem operasi Anda.

Untuk referensi juga lihat Bagaimana memeriksa apakah ada file menggunakan Python?

Jika Anda membutuhkan operasi tingkat tinggi, gunakan shutil.

82
bishop

Menguji file dan folder dengan os.path.isfile(), os.path.isdir() dan os.path.exists()

Dengan asumsi bahwa "jalur" adalah jalur yang valid, tabel ini menunjukkan apa yang dikembalikan oleh setiap fungsi untuk file dan folder:

 enter image description here

Anda juga dapat menguji apakah suatu file adalah jenis file tertentu menggunakan os.path.splitext() untuk mendapatkan ekstensi (jika Anda belum mengetahuinya)

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

Pada 2016 cara terbaik masih menggunakan os.path.isfile:

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

Atau dengan Python 3 Anda bisa menggunakan pathlib:

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

Sepertinya tidak ada perbedaan fungsional yang bermakna antara coba/kecuali dan isfile(), jadi Anda harus menggunakan mana yang masuk akal.

Jika Anda ingin membaca file, jika ada, lakukan

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

Tetapi jika Anda hanya ingin mengubah nama file jika ada, dan karena itu tidak perlu membukanya, lakukan

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

Jika Anda ingin menulis ke file, jika tidak ada, lakukan

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

Jika Anda perlu mengunci file, itu masalah lain.

62
chad

Anda dapat mencoba ini (lebih aman):

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

Ouput adalah:

([Errno 2] Tidak ada file atau direktori seperti itu: 'whatever.txt')

Kemudian, tergantung pada hasilnya, program Anda bisa tetap berjalan dari sana atau Anda dapat kode untuk menghentikannya jika Anda mau.

53
philberndt

Meskipun saya selalu merekomendasikan menggunakan try dan except, ada beberapa kemungkinan untuk Anda (favorit pribadi saya menggunakan os.access):

  1. Coba buka file:

    Membuka file akan selalu memverifikasi keberadaan file. Anda dapat membuat fungsi seperti itu:

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

    Jika itu False, itu akan menghentikan eksekusi dengan IOError atau OSError yang tidak ditangani di versi Python yang lebih baru. Untuk menangkap pengecualian, Anda harus menggunakan percobaan kecuali klausa. Tentu saja, Anda selalu dapat menggunakan try kecuali `pernyataan seperti itu (terima kasih kepada hsandt untuk membuat saya berpikir):

    def File_Existence(filepath):
        try:
            f = open(filepath)
        except IOError, OSError: # Note OSError is for later versions of Python
            return False
    
        return True
    
  2. Gunakan os.path.exists(path):

    Ini akan memeriksa keberadaan apa yang Anda tentukan. Namun, ia memeriksa file dan direktori jadi waspadalah tentang bagaimana Anda menggunakannya.

    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. Gunakan os.access(path, mode):

    Ini akan memeriksa apakah Anda memiliki akses ke file. Itu akan memeriksa izin. Berdasarkan dokumentasi os.py, mengetikkan os.F_OK, itu akan memeriksa keberadaan path. Namun, menggunakan ini akan membuat lubang keamanan, karena seseorang dapat menyerang file Anda menggunakan waktu antara memeriksa izin dan membuka file. Anda harus langsung membuka file daripada memeriksa izinnya. ( EAFP vs LBYP ). Jika Anda tidak akan membuka file setelahnya, dan hanya memeriksa keberadaannya, maka Anda dapat menggunakan ini.

    Bagaimanapun, ini:

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

Saya juga harus menyebutkan bahwa ada dua cara agar Anda tidak dapat memverifikasi keberadaan file. Entah masalahnya adalah permission denied atau no such file or directory. Jika Anda menangkap IOError, atur IOError as e (seperti opsi pertama saya), lalu ketik print(e.args) sehingga Anda mudah-mudahan dapat menentukan masalah Anda. Saya harap ini membantu! :)

48
Zizouz212

Tanggal: 2017-12-04

Setiap solusi yang mungkin telah dicantumkan dalam jawaban lain.

Cara intuitif dan dapat diperdebatkan untuk memeriksa apakah ada file adalah sebagai berikut:

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

Saya membuat cheatsheet lengkap untuk referensi Anda:

#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

Selain itu, os.access():

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

Menjadi R_OK, W_OK, dan X_OK menjadi bendera untuk menguji izin ( doc ).

32
zgoda

Jika file tersebut untuk dibuka, Anda dapat menggunakan salah satu dari teknik berikut:

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

PERBARUI

Hanya untuk menghindari kebingungan dan berdasarkan jawaban yang saya dapatkan, jawaban saat ini menemukan direktori file atau dengan nama yang diberikan.

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

Memunculkan pengecualian dianggap sebagai pendekatan yang dapat diterima, dan Pythonic, untuk kontrol aliran dalam program Anda. Pertimbangkan untuk menangani file yang hilang dengan IOErrors. Dalam situasi ini, pengecualian IOError akan dimunculkan jika file ada tetapi pengguna tidak memiliki izin baca.

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

20
Pedro Lobito

Anda dapat menulis saran Brian tanpa try:.

from contextlib import suppress

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

suppress adalah bagian dari Python 3.4. Dalam rilis lama Anda dapat dengan cepat menulis penekanan Anda sendiri:

from contextlib import contextmanager

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

Jika Anda sudah mengimpor NumPy untuk tujuan lain maka tidak perlu mengimpor perpustakaan lain seperti pathlib, os, paths, dll.

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

Ini akan mengembalikan benar atau salah berdasarkan keberadaannya.

17
durjoy

Periksa file atau direktori yang ada

Anda dapat mengikuti tiga cara ini:

Note1: os.path.isfile hanya digunakan untuk file

import os.path
os.path.isfile(filename) # True if file exists
os.path.isfile(dirname) # False if directory exists

Note2: os.path.exists digunakan untuk file dan direktori

import os.path
os.path.exists(filename) # True if file exists
os.path.exists(dirname) #True if directory exists

Metode pathlib.Path (termasuk dalam Python 3+, dapat diinstal dengan pip untuk Python 2)

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

Menambahkan satu lagi sedikit variasi yang tidak persis tercermin dalam jawaban yang lain.

Ini akan menangani kasus file_path menjadi None atau string kosong.

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

Menambahkan varian berdasarkan saran dari Shahbaz

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

Menambahkan varian berdasarkan saran dari Peter Wood

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

Saya penulis paket yang sudah ada sekitar 10 tahun, dan memiliki fungsi yang menjawab pertanyaan ini secara langsung. Pada dasarnya, jika Anda menggunakan sistem non-Windows, ia menggunakan Popen untuk mengakses find. Namun, jika Anda menggunakan Windows, ia mereplikasi find dengan walker sistem file yang efisien.

Kode itu sendiri tidak menggunakan blok try ... kecuali dalam menentukan sistem operasi dan dengan demikian mengarahkan Anda ke "Unix" -style find atau hand-buillt find. Tes waktu menunjukkan bahwa try lebih cepat dalam menentukan OS, jadi saya menggunakannya di sana (tapi tidak ada tempat lain).

>>> import pox
>>> pox.find('*python*', type='file', root=pox.homedir(), recurse=False)
['/Users/mmckerns/.python']

Dan dokter ...

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

>>>

Implementasinya, jika Anda ingin melihatnya, ada di sini: https://github.com/uqfoundation/pox/blob/89f90fb308f285ca7a62eabe2c38acb87e89dad9/pox/shutils.py#L190

15
Mike McKerns

Berikut adalah perintah Python 1 baris untuk lingkungan baris perintah Linux. Saya menemukan ini SANGAT HANDY karena saya bukan orang Bash panas.

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

Saya harap ini membantu.

Bagaimana saya memeriksa apakah ada file, tanpa menggunakan pernyataan coba?

Pada 2016, ini masih bisa dibilang cara termudah untuk memeriksa apakah kedua file itu ada dan apakah itu file:

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

isfile sebenarnya hanyalah metode pembantu yang secara internal menggunakan os.stat dan stat.S_ISREG(mode) di bawahnya. os.stat ini adalah metode tingkat rendah yang akan memberi Anda informasi terperinci tentang file, direktori, soket, buffer, dan banyak lagi. Lebih lanjut tentang os.stat di sini

Catatan: Namun, pendekatan ini tidak akan mengunci file dengan cara apa pun dan oleh karena itu kode Anda dapat menjadi rentan terhadap " waktu pemeriksaan terhadap waktu penggunaan " (TOCTTOU) bug.

Jadi, meningkatkan pengecualian dianggap sebagai pendekatan aliran kontrol yang dapat diterima, dan Pythonic, dalam program Anda. Dan seseorang harus mempertimbangkan untuk menangani file yang hilang dengan IOErrors, daripada if pernyataan (hanya saran).

11
Inconnu

Anda dapat menggunakan pustaka "OS" dari Python:

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

Anda dapat menggunakan metode terbuka berikut untuk memeriksa apakah file ada + dapat dibaca:

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"

Ini sangat membantu ketika memeriksa beberapa file. Atau Anda ingin melakukan persimpangan/pengurangan set dengan daftar yang ada.

8
Jesvin Jose

Untuk memeriksa apakah ada file,

from sys import argv

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

Anda dapat menggunakan os.listdir untuk memeriksa apakah suatu file ada di direktori tertentu.

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

Pada dasarnya cek folder, lalu cek file dengan pemisah direktori yang benar menggunakan os.path.join .

4

Anda harus menggunakan yang ini.

from os.path import exists

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

Mungkin tidak diperlukan, tetapi jika ya, inilah beberapa kode

import os

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