Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有python方法来验证文件或URL的存在?_Python - Fatal编程技术网

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

是否有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

我正在编写一个Python脚本,需要验证文件的存在性。文件可以是像
/home/xxx/file.txt这样的完整路径,也可以是URL
http://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: