是否有python方法来验证文件或URL的存在?
我正在编写一个Python脚本,需要验证文件的存在性。文件可以是像是否有python方法来验证文件或URL的存在?,python,Python,我正在编写一个Python脚本,需要验证文件的存在性。文件可以是像/home/xxx/file.txt这样的完整路径,也可以是URLhttp://company.com/xxx/file.txt 有没有一种python方法可以验证各种路径模式的存在性?我过去用过这些方法来检查URL是否存在,但如果您只是在查找文件,请使用注释中建议的方法 import requests request = requests.get('http://company.com/') if request
/home/xxx/file.txt这样的完整路径,也可以是URLhttp://company.com/xxx/file.txt
有没有一种python方法可以验证各种路径模式的存在性?我过去用过这些方法来检查URL是否存在,但如果您只是在查找文件,请使用注释中建议的方法
import requests
request = requests.get('http://company.com/')
if request.status_code == 200:
print('We are dandy.')
else:
print('No existe.')
你打算怎么处理这个文件
如果需要使用该文件,最好先打开它,以免它在使用前消失。如果先测试,然后打开,则可能会出现安全问题,因为这两个操作不能成为原子操作。在代码打开文件之前,可能会删除、创建或以其他方式干扰该文件
如果您只是想知道在测试某个路径时该路径是否存在,请使用它。否则,如果您想实际处理该文件,请对其调用open()
对于URL,您需要访问它。。。使用urlopen()
或使用请求获取它。您还可以尝试发送HEAD请求,以确定资源是否存在,而无需下载其内容。如果您正在检查返回大量数据的资源(如图像或音乐文件),这将非常有用。该模块简化了这一过程:
import requests
r = requests.head(url, allow_redirects=True)
if r.status_code == 200:
# resource apparently exists
头请求需要allow_重定向
,例如:
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
我在回答你没有问的问题,告诉你:不要这样做
您很少只想验证存在性,因为通常,如果它存在,您就想使用它。检查,然后打开是一个对竞争条件打开的模式(您检查,文件存在,其他程序删除它,您尝试打开它进行读取,kaboom)。通常,检查文件(或您希望使用的任何其他资源)是否可用的正确方法是尝试打开该文件,如果该文件不存在,则处理异常
一般模式被称为,与您尝试使用的相反模式相比,对于像这样容易发生种族冲突的活动,它要安全得多
因此,如果要检查某个文件是否存在,请对其调用open
。如果要检查URL是否存在,请尝试urlopen
it。这不仅仅是验证存在性,它还可以让您知道重要的信息,如“它是类似文件的东西吗?”、“我有权阅读内容吗?”等。否则,需要检查多个标志,如果您问错了问题,仍然可以告诉您错误的答案(例如,如果它是一个文件,只要您可以从中读取数据,这几乎不重要,但选中isfile
会排除诸如由bash
进程替换创建的命名管道之类的内容,这些管道主要与文件类似)。对于文件:os.path.exists(…)
对于该文件,请使用os.path.isfile()
。对于URL,您必须尝试连接(因为它不在本地计算机上)。你打算如何处理该文件?如果你需要使用该文件,最好先打开它,以免它在使用前消失。这没关系,但我认为HEAD可能更适合这样做,尤其是当URL用于大型资源时。我非常感谢您为设置“允许重定向”而采取的谨慎措施!顺便说一句:您不需要根据200测试状态代码。只要测试响应对象就足够了:if r: