python - 区分文件名和 URL

标签 python url filenames

在 WeasyPrint 的公共(public) API 中,我接受 HTML 输入的文件名或 URL(以及其他类型):

document = HTML(filename='/foo/bar/baz.html')
document = HTML(url='http://example.net/bar/baz.html')

也可以选择不命名参数,让 WeasyPrint 猜测它的类型:

document = HTML(sys.argv[1])

有些情况很简单:如果它在 Unix 上以 / 开头,它就是一个文件名,如果它以 http:// 开头,它可能是一个 URL。但是我们需要一个通用算法来给出任何字符串的答案。

目前我尝试匹配这个正则表达式:^([a-z][a-z0-1.+-]*):。根据 RFC 3986 (URI),匹配的字符串以有效的 URI 方案开头.这在 Unix 上还不错,但在 Windows 上完全失败:C:\foo\bar.html 匹配并被视为 URL。

我可以将正则表达式中的 * 更改为 + 并且只匹配至少两个字符长的 URI 方案。显然没有 known URI scheme比那个短。

或者有更好的标准吗?也许我应该将“猜测的”URL 限制为少数方案。更多奇特的情况仍然可以使用 HTML(url=foo)

url.startswith(['http:', 'https:', 'ftp:', 'data:'])

最佳答案

如果你真的必须在文件名和 URL 之间猜对,我会说一个包含 2 个或更多单词字符的字符串,然后一个冒号是一个 URL,其他任何东西都是一个文件,就像你建议的那样。

另一种选择:尝试将其作为文件打开。如果失败,请尝试将其作为 URL 打开。

最好还是听听 Python 的禅宗,“抵制猜测的诱惑”。来电者不知道他说的是文件名还是 URL?让他们具体说明。

关于python - 区分文件名和 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11687916/

相关文章:

python - 在 Python Tkinter 中使用函数时添加图像

firefox - 浏览器添加 www.和 .com 自动到服务器地址

Python 测试给定文件夹路径中的文件路径

android - 从Android中的目录获取文件名

python - Jupyter 笔记本内核一直死机 - 内存不足?

python - 在 python selenium 中使用 get_attribute() 查找 xpath

python - 使用 Visual Studio Code 将请求导入 Python

url - 在 seo 的 slug url 中使用单词的首字母缩略词是一种好习惯吗?

iphone - 为什么 [url pathComponents] 包含 "/"?

c# - 枚举类文件名应该以 'Enum' 为后缀吗?