是否有一个python方法来验证文件或URL的存在?

时间:2016-03-09 01:29:26

标签: python

我正在编写一个需要验证文件存在的Python脚本。该文件可以是完整路径,如/home/xxx/file.txt,也可以是网址http://company.com/xxx/file.txt

是否有一个python方法可以验证路径的各种模式的存在?

3 个答案:

答案 0 :(得分:2)

您打算如何处理该文件?

如果您需要使用该文件,最好打开它,以免在使用之前消失。如果先测试然后再打开就会出现安全问题,因为这两个操作无法原子化。在您的代码打开文件之前,可能会删除,创建或以其他方式干扰文件。

如果您只是想知道在测试路径时是否存在路径,请使用os.path.exists()。否则,如果您想对文件执行某些操作,请在其上调用open()

对于您需要访问的网址...要么使用urlopen()获取,要么使用requests。您还可以尝试发送HEAD请求以确定资源是否存在而不下载内容。如果您正在检查返回大量数据的资源(如图像或音乐文件),这将非常有用。 requests模块使这一切变得简单:

import requests

r = requests.head(url, allow_redirects=True)
if r.status_code == 200:
    # resource apparently exists

HEAD请求需要allow_redirects,例如

import requests

url = 'http://www.google.com'
r = requests.head(url)
print(r.status_code)
# 302
r = requests.head(url, allow_redirects=True)
print(r.status_code)
# 200

答案 1 :(得分:1)

以上是我过去用来检查网址是否存在的问题,但如果您只是查找文件,请使用评论中建议的方法。

import requests
    request = requests.get('http://company.com/')
    if request.status_code == 200:
        print('We are dandy.')
    else:
        print('No existe.')

答案 2 :(得分:0)

我回答了你没有问过的问题,并告诉你:不要这样做。

您很少只想验证存在,因为通常,如果它存在,您想要使用它。检查,然后打开是一种对竞争条件开放的模式(你检查,文件存在,其他一些程序删除它,你试图打开它进行阅读,kaboom)。通常,检查文件(或您希望使用的任何其他资源)是否可用的正确方法是尝试打开它,并在结果不存在时处理该异常。

一般模式称为EAFP (easier to ask forgiveness than seek permission),对于像这样的易受竞争的活动而言,比您尝试使用的相反模式LBYL (look before you leap)更安全。

因此,如果您想检查文件是否存在,请在其上调用open。如果您想检查网址是否存在,请尝试urlopen。这不仅仅是验证存在,还可以让你知道重要的东西,比如"它是一个类似文件的东西吗?","我是否有权阅读内容?"等等,否则需要检查多个标志,如果你不正确地问这个问题,它仍然可以告诉你错误的答案(例如,如果它是一个文件很少重要,只要你能从中读取数据,但检查{{ 1}}排除诸如由isfile进程替换创建的命名管道之类的东西,其主要用作文件。)