我试图将a python function作为参数调用绝对路径,但我想引用的文件在网上。
如果没有在本地克隆文件,有没有办法可以引用文件使python 认为文件是本地文件?
换句话说,我想将URL包装在变量my_file_path
中,并将其返回True
:
os.path.isfile(my_file_path)
请注意,我需要假冒文件系统路径,因为我正在使用的程序中的其他调用期望路径,而不是类似文件的对象(这包括调用the function I linked的其他函数)
答案 0 :(得分:2)
执行此操作的一个非常好的方法是使用requests库。您可以使用get
函数的stream=True
选项获取类似文件的对象:
r = requests.get('https://api.github.com/events', stream=True)
loadmat(r.raw, ...)
如果需要实际路径,您也可以使用tempfile模块:
with tempfile.NamedTemporaryFile() as fd:
r = requests.get('https://api.github.com/events', stream=True)
for chunk in r.iter_content(chunk_size):
fd.write(chunk)
fd.flush()
loadmat(fd.name)
# other code here, where the temp file no longer exists but the data has been read
答案 1 :(得分:2)
没有办法让Python获取想要路径的URL。
在许多情况下 - 就像你在问题中链接的函数一样 - 它实际上想要一个类似文件的对象,而由urlopen
返回的对象就像文件一样。但在其他情况下,这不起作用。
那么,你能做什么?
os.path.isfile(my_file_path)
测试,并将与其他需要文件的测试一起使用。但这意味着您需要保留代码的两个“层” - 要处理URL的部分,以及需要处理只能将本地文件分开的函数的部分,并在这些部分之间编写接口层。至少在某些平台上,您可以创建一个永远不会刷新到磁盘的临时文件,除非必要。 (你甚至可以创建一个临时文件,它不会出现在目录树的任何地方,但这在这里没有用,因为那时你显然无法传递路径名...)所以你不是“克隆文件”在任何意义上都是重要的。