识别本地文件或 url 的 pythonic 方式

pythonic way to identify a local file or a url

URL

http://www.example.com
www.example.com
http://example.com
https://example.com

本地文件

file:///example.html
/home/user/example.html
./home/user/example.html
.dir/data/example.html

考虑以上输入并识别给定的输入字符串是本地常规文件还是 URL?

我试过的

import os
from urllib.parse import urlparse

def is_local(_str):
    if os.path.exists(path1):
        return True
    elif urlparse(_str).scheme in ['','file']:
        return True
    return False

通话

is_local('file:///example.html')     # True
is_local('/home/user/example.html')  # True
is_local('./home/user/example.html') # True
is_local('.dir/data/example.html')   # True

is_local('http://www.example.com')   # False
is_local('www.example.com')          # True
is_local('http://example.com')       # False
is_local('https://example.com')      # False

有没有什么 pythonic 方法可以在不使用 urllib 的情况下识别文件是本地文件还是 URL?

您可以组合使用 urllib.parse.urlpathos.path.exisis。第一个从 URL 中提取文件路径,第二个检查路径是否实际引用文件。

from urllib.parse import urlparse
from os.path import exists

def is_local(url):
    url_parsed = urlparse(url)
    if url_parsed.scheme in ('file', ''): # Possibly a local file
        return exists(url_parsed.path)
    return False