我需要获取在命令行中收到的资源的内容。用户可以编写文件或URL的相对路径。是否可以从此资源读取,无论它是文件或URL的路径?
在Ruby中,我有类似下一个的东西,但我在查找Python替代方案时遇到了问题:
content = open(path_or_url) { |io| io.read }
答案 0 :(得分:2)
我不知道这样做的好方法,但是,urllib.request.urlopen()
将支持打开普通URL(http,https,ftp等)以及文件系统上的文件。因此,如果URL缺少方案组件,您可以假设一个文件:
from urllib.parse import urlparse
from urllib.request import urlopen
resource = input('Enter a URL or relative file path: ')
if urlparse(resource).scheme == '':
# assume that it is a file, use "file:" scheme
resource = 'file:{}'.format(resource)
data = urlopen(resource).read()
这适用于以下用户输入:
http://www.blah.com
file:///tmp/x/blah
file:/tmp/x/blah
file:x/blah # assuming cwd is /tmp
/tmp/x/blah
x/blah # assuming cwd is /tmp
请注意,file:
(不带斜杠)可能不是有效的URI,但是,这是打开由 relative 路径指定的文件的唯一方法,urlopen()
适用于此类URI。