检查文件或者目录是否存在的Python程序

时间:2020-01-09 10:44:20  来源:igfitidea点击:

在本教程中,我们将了解如何检查Python中是否存在文件或者目录。

1.使用os模块

在Python标准库的os.path模块中,有以下方法可用于检查文件或者目录是否存在。

  • os.path.exists(path)-如果path指向现有路径,则返回true,使用此功能,我们可以在执行任何操作之前检查文件或者目录是否存在。

  • os.path.isfile(path)-如果path是现有的常规文件,则返回True。

  • os.path.isdir(path)-如果path是现有目录,则返回True。

Python程序检查文件是否存在

from os import path

def test_file(file_path, mode='r'):
    if path.exists(file_path):
        print('File exists')
        with open(file_path, mode) as f:
          print(f.read())
    else:
        print('File doesn\'t exist')

test_file("F:/theitroad/Python/test.txt")

检查传递的路径是文件还是目录的Python程序。

from os import path
def test_file(file_path, mode='r'):
    print('Passed path is a directory', path.isdir(file_path))
    print('Passed path is a file', path.isfile(file_path))

# Passing file
test_file("F:/theitroad/Python/test.txt")
# Passing directory
test_file("F:/theitroad/Python")
# Passing non-existing file
test_file("F:/theitroad/Python/myfile.txt")

输出:

Passed path is a directory False
Passed path is a file True
Passed path is a directory True
Passed path is a file False
Passed path is a directory False
Passed path is a file False

2.将try-except与open()函数一起使用

如果我们尝试使用open()函数打开不存在的文件,则会引发FileNotFoundError异常。

def read_file(fname):
    try:
        f = open(fname, 'r')
        print(f.read())
    except FileNotFoundError:
        print('File does not exit')
    except IOError:
        print('IO Error')
    finally:
        f.close()

如我们所见,这里有两个除了块以外的块,一个专门用于找不到文件的场景,另一个用于任何类型的IOError。最后还用于确保文件已关闭。

3.使用pathlib模块

Python 3.4中添加的pathlib模块提供了面向对象的文件系统路径,并提供了一种检查文件是否存在的首选方法,Python 3.4及更高版本。我们必须使用的方法是Path.exists()。

from pathlib import Path
def test_file(file_path, mode='r'):
    file = Path(file_path)
    if file.exists():
        print('File exists')
        with open(file_path, mode) as f:
            print(f.read())
    else:
        print('File doesn\'t exist')

还有以下方法:

  • Path.is_dir()-此路径是否为目录。

  • Path.is_file()-此路径是否为常规文件。

from pathlib import Path
def test_file(file_path, mode='r'):
    path = Path(file_path)
    print('Passed path is a directory', path.is_dir())
    print('Passed path is a file', path.is_file())