我正在编写一个需要验证文件存在的Python脚本。该文件可以是完整路径,如/home/xxx/file.txt
,也可以是网址http://company.com/xxx/file.txt
。
是否有一个python方法可以验证路径的各种模式的存在?
答案 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
进程替换创建的命名管道之类的东西,其主要用作文件。)