看到Python库暴露一个通用的"开启者"函数并不常见,它接受一个字符串,它可以代表一个本地文件名(它将打开并操作),一个URL(它将下载并运行) on)或数据(它将在其上运行).
这是Feedparser的一个例子.
我的问题是:有一种标准的"正确"方式吗?或者,一个实现该功能的模块(可能作为装饰器)?
最终,任何实现此行为的模块都将解析字符串.并根据结果行事.例如,在feedparser中,他们正在解析url:
if urlparse.urlparse(url_file_stream_or_string)[0] in ('http', 'https', 'ftp'):
# do something with the url
else:
# This is a file path
return open(url_file_stream_or_string)
Run Code Online (Sandbox Code Playgroud)
这是一个很好的装饰,将为您做到这一点:
import urlparse, urllib
def opener(fun):
def wrapper(url):
if urlparse.urlparse(url)[0] in ('http', 'https', 'ftp'):
return fun(urllib.urlopen(url))
return fun(open(url))
return wrapper
@opener
def read(stream):
return stream.read()
read('myfile')
read('http://www.wikipedia.org')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |