将URL包装为文件系统路径

2024-04-25 15:29:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图调用以绝对路径作为参数的a python function,但我要引用的文件在web上。你知道吗

如果不在本地克隆文件,有没有一种方法可以引用这个文件,使python认为文件是本地的?你知道吗

换句话说,我想将URL包装在变量my_file_path中,并返回True

os.path.isfile(my_file_path)

注意,我需要伪造一个文件系统路径,因为我正在使用的程序中的其他调用需要的是路径,而不是类似文件的对象(这包括调用the function I linked的其他函数)


Tags: 文件path对象方法路径程序webtrue
2条回答

无法让Python在需要路径的地方获取URL。你知道吗

在许多情况下,就像你在问题中链接的函数一样,它实际上需要一个类似文件的对象,而返回的对象,例如urlopen是类似文件的。但在其他情况下,这是行不通的。你知道吗

那么,你能做什么?你知道吗

  1. 在Python级别之下,您的操作系统可能有一种方法可以挂载不同类型的远程路径,就好像它们是本地文件系统的一部分一样。你知道吗
  2. 在更高的层次上,编写自己的包装器,将文件下载到临时文件中。当然,这个临时文件将通过您想要的os.path.isfile(my_file_path)测试,并将处理需要文件的所有其他文件。但这意味着您需要保留代码的两个“层”——希望处理URL的部分和需要处理只能将本地文件分开的函数的部分,并编写这些层之间的接口。至少在某些平台上,您可以创建一个临时文件,除非必要,否则永远不会刷新到磁盘。(您甚至可以创建一个临时文件,它不会出现在目录树中的任何地方,但这在这里是没有帮助的,因为这样您就不能传递路径名了……),所以在任何意义上,您都不是在“克隆文件”真正重要的东西。你知道吗

一个非常好的方法是使用requests库。可以使用get函数的^{}选项获取类似文件的对象:

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

相关问题 更多 >