在Python 3中获取任意资源内容

时间:2014-10-21 11:34:44

标签: python python-3.x io

我需要获取在命令行中收到的资源的内容。用户可以编写文件或URL的相对路径。是否可以从此资源读取,无论它是文件或URL的路径?

在Ruby中,我有类似下一个的东西,但我在查找Python替代方案时遇到了问题:

content = open(path_or_url) { |io| io.read }

1 个答案:

答案 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。